Maison >développement back-end >Golang >Comment puis-je extraire la représentation binaire d'une valeur d'octet dans Go ?

Comment puis-je extraire la représentation binaire d'une valeur d'octet dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 17:46:02502parcourir

How can I extract the bit representation of a byte value in Go?

Extraire des représentations de bits à partir d'octets dans Go

Lors de la manipulation de valeurs d'octets dans Go, il est souvent nécessaire de travailler avec des bits individuels. Cet article explore les méthodes d'extraction des représentations binaires des octets, en abordant le défi spécifique de déterminer la représentation binaire pour la valeur d'octet 1.

Représentation binaire

Pour représenter visuellement les bits dans un octet, vous peut utiliser fmt.Sprintf(" b", ...), comme suggéré par d'autres. Cependant, pour les opérations mathématiques impliquant des bits, les opérateurs au niveau du bit sont indispensables.

Pour déterminer le nième bit d'un octet, effectuez une opération ET au niveau du bit (&) entre l'octet et un octet avec le nème bit mis à 1 (masque). Ce masque est calculé ainsi avec 20 = 1 (00000001) :

Le résultat est 1, indiquant que le 1er bit est 1.

Fonction de distance de Hamming
fmt.Print(13 & 1) // Output: 1

La distance de Hamming entre deux octets mesure le nombre de bits différents. Voici une fonction qui calcule la distance de Hamming entre deux tableaux d'octets (tableaux à un octet dans le scénario donné) :

Cette fonction utilise des opérations ET au niveau du bit pour comparer les bits correspondants des tableaux d'octets. Le Go Playground démontre son utilisation :

https://play.golang.org/p/O1EGdzDYAn
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
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn