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) }
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!