Maison > développement back-end > Golang > le corps du texte

Comment convertir efficacement des chaînes hexadécimales en valeurs Float32 dans Go ?

DDD
Libérer: 2024-11-23 19:23:13
original
648 Les gens l'ont consulté

How to Efficiently Convert Hexadecimal Strings to Float32 Values in Go?

Conversion de chaînes hexadécimales en valeurs flottantes

Lorsque la tentative de conversion de chaînes hexadécimales (par exemple, "0xC40C5253") en valeurs à virgule flottante à l'aide de strconv.ParseFloat s'avère infructueuse, une alternative méthodes doivent être explorées.

Une approche consiste à utiliser la fonction strconv.ParseUint() pour analyser les octets de la représentation hexadécimale en un entier non signé de 32 bits (uint32). Ceci est nécessaire car float32, couramment utilisé pour représenter une valeur flottante d'une longueur de 4 octets, nécessite que les octets soient interprétés comme tels.

En utilisant le package unsafe, les octets peuvent être réinterprétés comme une valeur float32 en créant un pointeur vers la variable uint32 et en l'attribuant à une variable float32.

Une approche alternative suggérée par JimB consiste à utiliser le package mathématique fonction intégrée, math.Float32frombits(). Cette fonction convertit directement un entier 32 bits non signé en valeur float32, éliminant ainsi le besoin d'opérations de pointeur dangereuses.

Voici un extrait de code mis à jour qui illustre le processus :

package main

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

func main() {
    s := "C40C5253"
    n, err := strconv.ParseUint(s, 16, 32)
    if err != nil {
        panic(err)
    }
    n2 := uint32(n)
    funsafe := *(*float32)(unsafe.Pointer(&n2))
    fmt.Println(funsafe)
    fmath := math.Float32frombits(n2)
    fmt.Println(fmath)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal