Maison > développement back-end > Golang > le corps du texte

Comment convertir une chaîne hexadécimale en un nombre à virgule flottante simple précision IEEE-754 en Go ?

Susan Sarandon
Libérer: 2024-11-27 03:03:10
original
229 Les gens l'ont consulté

How Do I Convert a Hex String to an IEEE-754 Single-Precision Floating-Point Number in Go?

Conversion de chaînes hexadécimales en valeurs flottantes IEEE-754

La conversion de chaînes hexadécimales en valeurs à virgule flottante peut être difficile, en particulier en utilisant la bibliothèque standard fonctionne seul. Cet article propose une solution basée sur la norme de conversion IEEE-754.

Pour commencer, il est crucial de déterminer la longueur en bits de l'entrée. Dans ce cas, comme la chaîne hexadécimale fait quatre octets, elle représente probablement un nombre float32.

  1. Analyse des octets à partir de la représentation hexadécimale

Tout d'abord, nous analysons les octets. de la représentation hexadécimale en un entier non signé de 32 bits (uint32) à l'aide de la fonction strconv.ParseUint(). Cette fonction renvoie un uint64, nous devons donc le convertir en uint32 pour qu'il corresponde à la taille de float32 :

s := "C40C5253"
n, err := strconv.ParseUint(s, 16, 32)
if err != nil {
    panic(err)
}
n2 := uint32(n)
Copier après la connexion
  1. Interprétation des octets comme un flottant IEEE-754

Bien que nous ayons les octets de la chaîne hexadécimale, ils sont toujours interprétés comme un entier. Pour les interpréter correctement comme un float IEEE-754, nous utilisons le package unsafe pour créer un pointeur vers la variable uint32 et le déréférencer en tant que float32 :

f := *(*float32)(unsafe.Pointer(&n2))
Copier après la connexion
  1. Impression du résultat

Enfin, nous pouvons imprimer la valeur float32 résultante :

fmt.Println(f)
Copier après la connexion

Exemple Sortie :

-561.2863
Copier après la connexion
  1. Méthode alternative

Le package math fournit la fonction math.Float32frombits(), qui effectue la conversion directement d'un uint32 en un float32 :

f := math.Float32frombits(n)
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal