Maison  >  Article  >  développement back-end  >  Comment convertir des types numériques en []byte et inversement ?

Comment convertir des types numériques en []byte et inversement ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 21:42:03419parcourir

How to Convert Numeric Types to []byte and Back in Go?

Conversion de types numériques en []byte et inversement

Dans Go, vous pouvez convertir des entiers non signés en un tableau d'octets à l'aide des méthodes Uint16() et Uint32() de les types binaire.BigEndian et binaire.LittleEndian. Cependant, vous avez peut-être remarqué l'absence de méthodes Int16() ou Float32() équivalentes.

Endianness et types numériques

Endianness fait référence à l'ordre dans lequel les octets sont stockés en mémoire pour un temps donné. type numérique. Le package binaire de Go fournit des fonctionnalités de conversion entre différentes endianness.

Conversion en entiers signés

Pour convertir un entier non signé en un entier signé, vous pouvez utiliser une simple conversion de type. La disposition de la mémoire d'un entier non signé de 16 bits (uint16) et d'un entier signé de 16 bits (int16) est la même. Par conséquent, vous pouvez effectuer la conversion suivante :

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>

Cette conversion ne modifie pas la représentation de la mémoire, seulement le type.

Conversion en nombres à virgule flottante

Conversion les entiers non signés en nombres à virgule flottante sont légèrement plus impliqués. Le package mathématique de Go fournit des fonctions de conversion entre des entiers non signés et des flottants, telles que math.Float32frombits() et math.Float64frombits().

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>

Cette conversion ne manipule pas la valeur de la mémoire mais la "visualise" à la place. comme un type différent en utilisant le package non sécurisé.

Utilisation de binaire.Read() et binaire.Write()

Le package binaire fournit également les fonctions Read() et Write(), qui exécutent ces conversions sous le capot. Vous pouvez utiliser ces fonctions pour convertir entre différents types numériques et tableaux d'octets.

<code class="go">var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)

// or

a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)</code>

Dans cet exemple, le tableau d'octets d'entrée contient la valeur de pi au format petit-boutien. La fonction Read() convertit le tableau d'octets en valeur float64, tandis que Uint64() et Float64frombits() effectuent la conversion manuellement.

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