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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 16:18:17416parcourir

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

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

Problème :
Conversion de chaînes hexadécimales (par exemple, "0xC40C5253") en les valeurs à virgule flottante utilisant la conversion IEEE-754 se sont révélées difficiles avec le Fonction strconv.ParseFloat. Existe-t-il une approche alternative ?

Réponse :
Pour convertir efficacement des chaînes hexadécimales en valeurs flottantes, envisagez les étapes suivantes :

  1. Déterminer la longueur en bits : Spécifiez la longueur en bits de la chaîne hexadécimale d'entrée (par exemple, 32 bits pour float32).
  2. Analyser la chaîne hexadécimale en UInt32 : Utilisez strconv.ParseUint() pour analyser la chaîne hexadécimale en un entier non signé de 32 bits (uint32).
  3. Convertir en Float32 : Utilisez le package non sécurisé pour réinterpréter le uint32 comme pointeur float32.

Voici un exemple d'extrait de code qui illustre ces étapes :

import (
    "fmt"
    "strconv"
    "unsafe"
)

func main() {
    s := "C40C5253"
    n, err := strconv.ParseUint(s, 16, 32)
    if err != nil {
        panic(err)
    }
    n2 := uint32(n)
    f := *(*float32)(unsafe.Pointer(&n2))
    fmt.Println(f)
}

Remarque :
Alternativement, le package mathématique fournit une fonction math.Float32frombits() intégrée pour convertir les valeurs uint32 en float32, qui peut être utilisé à la place du package non sécurisé :

f := math.Float32frombits(n2)

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