Go語言聖經練習4.1

前言

網上看到好幾個相同的錯誤版本,因此提供下正確的。

代碼

找到的錯誤版本

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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章