從Go 中的位元組取得位元
要從Go 中的位元組中擷取各位,可以考慮多種方法。
視覺表示:
對於位的視覺表示,您可以使用 fmt.Sprintf(" b", ...)以二進位格式列印位元組.
位元運算:
但是,如果您需要使用位元進行諸如計算漢明距離之類的操作,則需要使用按位運算符。
要檢索位元組的第 n 位,請按位與該位元組與掩碼,其中第 n 位元設為 1,其餘設為 0(即 2 的冪)。例如,要尋找位元組 13 的第 1 位元 (00001101),請用 1 (00000001) 對其進行遮罩。如果按位與的結果等於掩碼,則第 n 位元為 1。
範例程式碼:
<code class="go">fmt.Print(13 & 1) // Output: 1 (1st bit) fmt.Print(13 & 2) // Output: 0 (2nd bit) fmt.Print(13 & 4) // Output: 4 (3rd bit) fmt.Print(13 & 8) // Output: 8 (4th bit)</code>
漢明距離計算:
要計算兩個位元組之間的漢明距離,請使用位元與運算來比較對應位元。如果結果位元為 1,則表示這些位元不同,並且您增加距離計數。
<code class="go">diff := 0 mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ }</code>
漢明距離函數:
這是一個用於計算兩個位元組數組之間的漢明距離的範例函數:
<code class="go">func hamming(a, b []byte) (int, error) { ... for j := 0; j < 8; j++ { mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ } } ... }</code>
此函數比較數組中對應位元組的位,並遞增每個不同位的距離計數。
以上是如何在 Go 中從位元組中提取各個位元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!