Maison >développement back-end >Golang >Comment puis-je encoder efficacement une tranche d'octets dans un int64 dans 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
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!