Extraire des bits d'un octet en Golang
De nombreuses tâches, telles que le calcul de la distance de Hamming entre les octets, nécessitent l'accès à des bits individuels dans le octet. Cependant, les packages Golang intégrés ne fournissent pas de fonction directe à cet effet.
Représentation visuelle vs opérations au niveau du bit
Une approche consiste à utiliser fmt.Sprintf (" b", ...) pour imprimer une représentation binaire de l'octet, comme le suggèrent plusieurs réponses en ligne. Cependant, cette approche fournit simplement une représentation visuelle des bits, ce qui la rend inadaptée aux opérations telles que les comparaisons au niveau des bits.
Masquage de bits pour récupérer des bits
Pour effectuer des opérations au niveau des bits, nous pouvons utiliser l'opérateur ET au niveau du bit (&) avec le masquage. Par exemple, pour obtenir le nième bit d'un octet (où n commence à 1), on crée un masque m où seul le nième bit est mis à 1. Ce masque peut être obtenu comme m = 2**(n-1). En effectuant l'opération AND au niveau du bit sur l'octet avec le masque, nous pouvons déterminer si le nième bit est défini :
if (b & m) != 0 { // nth bit is set to 1 }
Exemple de code
Le le code suivant démontre l'utilisation du masquage de bits pour extraire les bits d'un octet et calculer la distance de Hamming :
<code class="go">package main import "fmt" 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++ { // Create a mask to check the (j+1)th bit mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ } } } return diff, nil } func main() { // Example: Compute the Hamming distance between two bytes b1 := byte(255) // 11111111 b2 := byte(0) // 00000000 distance, err := hamming([]byte{b1}, []byte{b2}) if err != nil { fmt.Println(err) return } fmt.Println("Hamming distance:", distance) // Outputs: 8 }</code>
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!