Obtenir des bits à partir d'octets dans Go
Pour extraire les bits individuels d'un octet dans Go, il existe plusieurs approches à considérer.
Représentation visuelle :
Pour une représentation visuelle des bits, vous pouvez utiliser fmt.Sprintf(" b", ...) pour imprimer l'octet au format binaire .
Opérations au niveau du bit :
Cependant, si vous devez utiliser les bits pour des opérations telles que le calcul de la distance de Hamming, vous devrez utiliser des opérateurs au niveau du bit.
Pour récupérer le nième bit d'un octet, au niveau du bit ET l'octet avec un masque dont le nième bit est défini sur 1 et le reste sur 0 (c'est-à-dire une puissance de 2). Par exemple, pour retrouver le 1er bit de l'octet 13 (00001101), masquez-le avec 1 (00000001). Si le résultat du ET au niveau du bit est égal au masque, le nième bit est 1.
Exemple de code :
<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>
Calcul de la distance de Hamming :
Pour calculer la distance de Hamming entre deux octets, utilisez l'opération ET au niveau du bit pour comparer les bits correspondants. Si le bit résultant est 1, cela indique que les bits sont différents et vous incrémentez le nombre de distances.
<code class="go">diff := 0 mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ }</code>
Fonction pour la distance de Hamming :
Voici un exemple de fonction pour calculer la distance de Hamming entre deux tableaux d'octets :
<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>
Cette fonction compare les bits des octets correspondants dans les tableaux et incrémente le nombre de distances pour chaque bit différent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!