Heim > Artikel > Backend-Entwicklung > Wie extrahiere ich einzelne Bits aus einem Byte in Go?
Bits aus Bytes in Go abrufen
Um die einzelnen Bits aus einem Byte in Go zu extrahieren, gibt es mehrere Ansätze zu berücksichtigen.
Visuelle Darstellung:
Für eine visuelle Darstellung der Bits können Sie fmt.Sprintf(" b", ...) verwenden, um das Byte im Binärformat zu drucken .
Bitweise Operationen:
Wenn Sie jedoch die Bits für Operationen wie die Berechnung der Hamming-Distanz verwenden müssen, müssen Sie bitweise Operatoren verwenden.
Um das n-te Bit eines Bytes abzurufen, bitweise UND das Byte mit einer Maske, bei der das n-te Bit auf 1 und der Rest auf 0 (d. h. eine Potenz von 2) gesetzt ist. Um beispielsweise das 1. Bit des Bytes 13 (00001101) zu finden, maskieren Sie es mit 1 (00000001). Wenn das Ergebnis der bitweisen UND-Verknüpfung gleich der Maske ist, ist das n-te Bit 1.
Beispielcode:
<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>
Hamming-Distanzberechnung:
Um den Hamming-Abstand zwischen zwei Bytes zu berechnen, verwenden Sie die bitweise UND-Operation, um die entsprechenden Bits zu vergleichen. Wenn das resultierende Bit 1 ist, bedeutet dies, dass die Bits unterschiedlich sind, und Sie erhöhen die Distanzanzahl.
<code class="go">diff := 0 mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ }</code>
Funktion für Hamming-Distanz:
Hier ist eine Beispielfunktion zur Berechnung des Hamming-Abstands zwischen zwei Byte-Arrays:
<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>
Diese Funktion vergleicht die Bits entsprechender Bytes in den Arrays und erhöht den Abstandszähler für jedes ungleiche Bit.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich einzelne Bits aus einem Byte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!