Maison > développement back-end > Golang > Comment convertir des octets binaires en entiers signés et en flottants en Go ?

Comment convertir des octets binaires en entiers signés et en flottants en Go ?

DDD
Libérer: 2024-10-31 09:54:02
original
463 Les gens l'ont consulté

How to Convert Binary Bytes to Signed Integers and Floats in Go?

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

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

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

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>
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