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
Libérer: 2024-10-31 01:15:03
original
326 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal