Maison  >  Article  >  développement back-end  >  Comment puis-je convertir des chaînes hexadécimales en valeurs à virgule flottante IEEE-754 dans Go ?

Comment puis-je convertir des chaînes hexadécimales en valeurs à virgule flottante IEEE-754 dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 01:13:13194parcourir

How Can I Convert Hex Strings to IEEE-754 Floating-Point Values in Go?

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!

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
Article précédent:Opter pour Mattermost !Article suivant:Opter pour Mattermost !