Maison > développement back-end > Golang > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-04 17:46:02
original
492 Les gens l'ont consulté

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
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal