Conversion des données binaires stockées dans []octet en types numériques comme des entiers signés ou flottants les nombres de points nécessitent une compréhension du boutisme. L'endianité définit l'ordre dans lequel les octets sont stockés en mémoire, avec deux formats courants étant le petit-boutiste (l'octet le moins significatif en premier) et le big-endian (l'octet le plus significatif en premier).
Alors que le package binaire Go fournit des fonctions comme LittleEndian.Uint16() pour convertir []byte en entiers non signés, il n'y a pas d'équivalents directs pour les entiers signés (Int16()). En effet, l'endianisme n'affecte que l'interprétation des données, pas leur représentation réelle en mémoire.
Pour convertir un entier non signé en un entier signé, une simple conversion de type suffit puisqu'ils partagent la même disposition de mémoire. Par exemple :
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
De même, vous pouvez convertir un entier non signé en nombre à virgule flottante à l'aide des fonctions du package mathématique Float32frombits() et Float64frombits().
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a)</code>
Le binaire Le package fournit également les fonctions Read() et Write() qui peuvent effectuer ces conversions sous le capot.
<code class="go">import "bytes" b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(b) var pi float64 err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Println(pi) // Using Read() produces the same result as using Uint64() and Float64frombits(): a := binary.LittleEndian.Uint64(b) a2 := math.Float64frombits(a) fmt.Println(a2) // Output: // 3.141592653589793 // 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!