Maison  >  Article  >  développement back-end  >  Comment puis-je convertir des tableaux d'octets en entiers signés et en flottants dans Go ?

Comment puis-je convertir des tableaux d'octets en entiers signés et en flottants dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 07:53:30870parcourir

How can I convert byte arrays to signed integers and floats in Go?

Conversion de tableaux d'octets en entiers signés et flottants dans Go

Dans Go, le package binaire offre des fonctions pour convertir des entiers non signés à partir de []byte tableaux, tels que binaire.LittleEndian.Uint16() et binaire.BigEndian.Uint32(). Cependant, il n'existe pas d'équivalents directs pour les entiers signés ou les flottants.

Raison de l'absence de fonctions de conversion d'entiers signés

L'absence de fonctions de conversion d'entiers signés est principalement due au fait qu'interpréter une représentation binaire comme une valeur signée ou non signée est une question de logique de programmation. Le tableau []byte lui-même ne contient que des données binaires brutes, qui peuvent être interprétées comme signées ou non signées selon les exigences de l'application.

Comment convertir en entiers signés

Pour convertir une valeur entière non signée en un entier signé, une simple conversion de type peut être utilisée. Étant donné que la disposition de la mémoire des entiers non signés et signés de même taille est identique, la conversion de a de uint16 en int16 à l'aide de int16(a) conservera la représentation binaire d'origine tout en attribuant le signe approprié.

Conversion en Flotteurs

La conversion d'entiers non signés en flottants nécessite un peu plus d'implication. Le package math fournit des fonctions à cet effet : math.Float32frombits() et math.Float64frombits(). À l'inverse, math.Float32bits() et math.Float64bits() peuvent être utilisés pour obtenir la représentation entière non signée des valeurs flottantes.

Utilisation de Binary.Read() et Binary.Write()

Le package binaire comprend également les fonctions Read() et Write() qui peuvent effectuer ces conversions plus efficacement sous le capot. Ces fonctions vous permettent de lire directement une valeur saisie sans avoir besoin de conversions de type intermédiaires.

Exemple d'utilisation de Binary.Read() pour la conversion flottante

Considérez ce qui suit exemple :

<code class="go">b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}

fmt.Println(pi) // Output: 3.141592653589793</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!

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