首頁  >  文章  >  後端開發  >  如何在 Go 中從位元組中提取各個位元?

如何在 Go 中從位元組中提取各個位元?

DDD
DDD原創
2024-11-06 17:06:02301瀏覽

How to Extract Individual Bits from a Byte in Go?

從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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn