Maison >développement back-end >Golang >Comment convertir Go []byte en entier signé Little/Big-Endian ou Float ?

Comment convertir Go []byte en entier signé Little/Big-Endian ou Float ?

DDD
DDDoriginal
2024-10-31 01:15:03321parcourir

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

Convertir Go []octet en entier signé Little/Big-Endian ou Float

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, &amp;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!

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