Go でバイト値を操作する場合、多くの場合、個々のビットを操作する必要があります。この記事では、バイトからビット表現を抽出する方法を検討し、バイト値 1 のビット表現を決定するという特定の課題に対処します。
バイト内のビットを視覚的に表現するには、次のようにします。他の人が提案しているように、 fmt.Sprintf(" b", ...) を使用できます。ただし、ビットを含む数学演算の場合、ビット単位の演算子が不可欠です。
バイトの n 番目 ビットを決定するには、バイトと次のバイトの間でビット単位の AND 演算 (&) を実行します。 n番目ビットは 1 (マスク) に設定されます。このマスクは 2n-1 として計算されます。
数値 13 (00001101) の最初のビットを見つけるには、それをマスクします。 2で= 1 (00000001):
fmt.Print(13 & 1) // Output: 1
結果は 1 で、最初のビットが 1 であることを示します。
2 バイト間のハミング距離を測定します。異なるビットの数。次に、2 つのバイト配列 (指定されたシナリオではシングルバイト配列) 間のハミング距離を計算する関数を示します。
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 中国語 Web サイトの他の関連記事を参照してください。