在 Go 中操作位元組值時,通常需要處理各位元。本文探討了從位元組中提取位元表示的方法,解決了確定位元組值 1 的位元表示的具體挑戰。
要直觀地表示位元組中的位,您可以可以按照其他人的建議使用 fmt.Sprintf(" b", ...) 。然而,對於涉及位的數學運算,位元運算子是必不可少的。
要確定位元組的第n 位,請在位元組與位元組之間執行位元與運算(&):第nth 位元設定為1(掩碼)。此遮罩的計算方式為 2n-1。
要找出數字13 (00001101) 的第1 位,請將其遮罩20 = 1 (00000001):
fmt.Print(13 & 1) // Output: 1
結果為1,表示第1 位為1。
兩個位元組之間的漢明距離度量不同位數。這是一個計算兩個位元組數組(給定場景中的單字節數組)之間的漢明距離的函數:
func hamming(a, b []byte) (int, error) { if len(a) != len(b) { return 0, errors.New("a b are not the same length") } diff := 0 for i := 0; i < len(a); i++ { b1 := a[i] b2 := b[i] for j := 0; j < 8; j++ { mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ } } } return diff, nil }
該函數使用按位AND 運算來比較位元組數組的相應位。 Go Playground 示範了它的用法:
https://play.golang.org/p/O1EGdzDYAn
以上是如何在 Go 中提取位元組值的位元表示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!