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.
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)
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))
Enfin, nous pouvons imprimer la valeur float32 résultante :
fmt.Println(f)
Exemple Sortie :
-561.2863
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!