Comment convertir Go []byte en entier signé Little/Big-Endian ou Float ?
Lorsqu'il s'agit de données binaires, c'est crucial comprendre le concept d'endianité, qui fait référence à la manière dont les valeurs numériques multi-octets sont stockées en mémoire. Le package binaire de Go fournit des fonctions pratiques pour la conversion entre les types entiers non signés big-endian et small-endian comme Uint16 et Uint32. Cependant, il ne prend pas en charge directement les nombres entiers signés et les nombres à virgule flottante.
La clé pour surmonter cette limitation est d'aborder la tâche en deux étapes :
Conversion en entiers signés
Pour interpréter un uint16 comme un int16 signé, par exemple, utilisez simplement une conversion de type, car ils partagent la même disposition de mémoire :
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
Des principes similaires s'appliquent aux types entiers signés plus grands comme int64.
Conversion en nombres à virgule flottante
Bien que la conversion d'entiers non signés en types à virgule flottante ne puisse pas être effectuée directement via une conversion de type, le package mathématique de Go fournit des fonctions spécialement conçues à cet effet. but. Ces fonctions vous permettent de convertir des entiers non signés en flottants et vice versa sans altérer la représentation de la mémoire sous-jacente :
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // To convert back to unsigned integer: a3 := math.Float64bits(a2)</code>
Alternative utilisant binaire.Read() et Write()
Les fonctions binaires.Read et Write de Go peuvent être utilisées pour effectuer ces conversions plus efficacement en accédant directement à la représentation de la mémoire sous-jacente. Consultez l'exemple ci-dessous :
<code class="go">pi := float64(3.141592653589793) buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &pi) var result float64 binary.Read(buf, binary.LittleEndian, &result) fmt.Println(result)</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!