Conversion de chaînes hexadécimales en valeurs flottantes dans IEEE-754
Malgré l'utilisation de la fonction strconv.ParseFloat, conversion de chaînes hexadécimales en valeurs à virgule flottante peut poser un défi. Cet article explore des méthodes alternatives pour réaliser cette conversion en utilisant strconv.ParseUint et des packages non sécurisés.
Clarification de la longueur en bits
Avant de procéder à la conversion, il est crucial de déterminer la longueur en bits de la chaîne hexadécimale d'entrée. Comme mentionné dans la question, la représentation hexadécimale fournie comporte huit chiffres, indiquant un type de données float32 potentiel. Cependant, pour garantir l'exactitude, il est préférable de clarifier cela avec la personne qui pose la question.
Utilisation de strconv.ParseUint
Pour analyser les octets de la chaîne hexadécimale, strconv.ParseUint peut être employé. Cependant, comme il renvoie un uint64 qui occupe huit octets en mémoire, il doit être converti en un uint32 pour correspondre à la structure à quatre octets de float32.
s := "C40C5253" n, err := strconv.ParseUint(s, 16, 32) if err != nil { panic(err) } n2 = uint32(n)
Interprétation des octets comme flottants IEEE-754 Point
Maintenant que les octets sont stockés dans n2 en tant que uint32, ils doivent être interprétés sous forme d'octets d'un nombre à virgule flottante IEEE-754. Le package unsafe fournit un moyen d'accéder et de manipuler les pointeurs de mémoire, nous permettant de créer un float32 à partir des octets uint32.
f := *(*float32)(unsafe.Pointer(&n2))
Méthode alternative utilisant math.Float32frombits
Le package math comprend une fonction intégrée spécialement conçue à cet effet : math.Float32frombits. Il traduit directement une valeur uint32 en float32, offrant une approche plus simple.
f := math.Float32frombits(n2)
Sortie
En utilisant l'une ou l'autre méthode, l'exemple de chaîne hexadécimale fourni dans la question se convertit en -561.2863 lorsqu'il est interprété comme un float32. Tester cette solution sur Go Playground peut démontrer davantage sa fonctionnalité.
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!