Maison >développement back-end >Golang >Comment convertir une chaîne hexadécimale en un nombre à virgule flottante simple précision IEEE-754 en Go ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 03:03:10309parcourir

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)
  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))
  1. Impression du résultat

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

fmt.Println(f)

Exemple Sortie :

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

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