Conversion d'octets binaires en entiers signés et flottants dans Go
Dans Go, le package binaire fournit des méthodes pour convertir des tranches d'octets ([]byte ) en entiers non signés (par exemple, Uint16, Uint32). Cependant, il n'existe pas de méthodes explicites pour convertir des tranches d'octets en entiers signés ou en flottants.
Pourquoi cette omission ?
L'absence de méthodes de conversion d'entiers signés et de flottants dans le Le package binaire est probablement dû au fait que le caractère boutien affecte la façon dont les types numériques sont interprétés à partir des octets. L'endianité fait référence à l'ordre dans lequel les octets sont stockés en mémoire. Selon l'architecture du système, les octets peuvent être disposés en petit-boutiste (octet de poids faible en premier) ou en gros-boutiste (octet de poids fort en premier).
Conversion en entiers signés
Malgré le manque de méthodes dédiées, la conversion de []byte en entiers signés peut être réalisée via la conversion de type. Étant donné que les entiers non signés et signés ont la même disposition de mémoire, la conversion est simple :
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a) // Convert to signed int16</code>
De même, vous pouvez convertir les valeurs uint64 en valeurs int64.
Conversion en flottants
La conversion d'entiers non signés en flottants est plus complexe. Bien que vous puissiez tenter une simple conversion de type, cela entraînerait la conversion de la valeur numérique, et non de la représentation en mémoire.
Utilisez plutôt les fonctions fournies par le package mathématique :
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // Convert to float64</code>
Pour convertir des valeurs flottantes en entiers non signés avec la même disposition de mémoire, utilisez :
<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>
Fonctions pratiques Read() et Write()
Le package binaire fournit également Fonctions Read() et Write() qui peuvent effectuer ces conversions sous le capot. Par exemple :
<code class="go">var pi float64 buf := bytes.NewReader(sampleA) err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { panic(err) }</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!