Maison >développement back-end >Golang >Comment puis-je encoder efficacement une tranche d'octets dans un int64 dans Go ?

Comment puis-je encoder efficacement une tranche d'octets dans un int64 dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 14:03:10632parcourir

How can I efficiently encode a byte slice into an int64 in Go?

Encodage efficace des tranches d'octets dans Go

Comment pouvez-vous encoder une tranche d'octets dans un int64 dans Go en utilisant une approche idiomatique ? Considérez l'extrait de code suivant :

import "fmt"

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    var data int64
    for i := 0; i < 8; i++ {
                data |= int64(mySlice[i] & byte(255)) << uint((8*8)-((i+1)*8))
    }
    fmt.Println(data)
}

Bien que ce code accomplisse la tâche, existe-t-il une manière plus concise et élégante d'obtenir le même résultat ?

Solution idiomatique

Une manière plus idiomatique d'encoder une tranche d'octets dans un int64 est fournie dans ce qui suit code :

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := int64(0)
    for _, b := range mySlice {
        data = (data << 8) | int64(b)
    }
    fmt.Printf("%d\n", data)
}

Dans cette solution, nous utilisons l'opérateur de plage pour parcourir les éléments de la tranche d'octets et utilisons l'opérateur de décalage gauche au niveau du bit (<<) pour accumuler efficacement les valeurs dans un int64.

Avantages de l'idiomatique Approche

  • Simplicité :La boucle est plus simple et plus facile à lire, car elle évite les manipulations de bits et les calculs complexes.
  • Maintenabilité : Il est plus simple à maintenir et à étendre dans le futur, car il suit le modèle commun consistant à itérer sur une collection et à accumuler valeurs.
  • Efficacité : Malgré sa simplicité, le code reste efficace, avec une complexité temporelle et spatiale comparable à l'approche originale.

Conclusion

Bien que l'extrait de code original puisse être plus clair en termes d'opérations spécifiques de manipulation de bits, l'approche idiomatique est plus concis, élégant et maintenable. Dans la plupart des cas, la solution idiomatique est le choix préféré pour coder une tranche d'octets dans un int64 dans Go.

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