前言
网上看到好几个相同的错误版本,因此提供下正确的。
代码
找到的错误版本
func compareSha256(str1 string,str2 string)int{
a := sha256.Sum256([]byte(str1))
b := sha256.Sum256([]byte(str2))
num := 0
//循环字节数组
for i:=0;i<len(a);i++{
//1个字节8个bit,移位运算,获取每个bit
for m:=1;m<=8;m++{
//比较每个bit是否相同
if (a[i] >> uint(m))!=(b[i] >>uint(m)){
num++
}
}
}
return num
}
其中, 判断bit位是否相同是这么写的
if (a[i] >> uint(m))!=(b[i] >>uint(m)) ??? 不应该是取出每个bit,来判断是否同为1或者同为0吗?直接右移判相等是什么操作???
以45=(00101101)2 与 75=(01001011)2 为例最后两次右移相等,按上述计算方法结果为6,实际不同的bit只有4个。
正确版本提供如下
func compareSha256(str1 string, str2 string) int {
a := sha256.Sum256([]byte(str1))
b := sha256.Sum256([]byte(str2))
num := 0
// 循环字节数组
for i := 0; i < len(a); i++ {
for m := 0; m <= 7; m++ { // 对比字节是否相同
if (a[i] & (1<<m)) != (b[i] & (1<<m)) {
num++
}
}
}
return num
}