Der Versuch, hexadezimale Zeichenfolgen (z. B. „0xC40C5253“) mithilfe von strconv.ParseFloat in Gleitkommawerte umzuwandeln, erweist sich als erfolglos, Alternative Methoden müssen erforscht werden.
Eins Der Ansatz beinhaltet die Verwendung der Funktion strconv.ParseUint(), um die Bytes aus der Hex-Darstellung in eine vorzeichenlose 32-Bit-Ganzzahl (uint32) zu analysieren. Dies ist notwendig, da float32, das üblicherweise zur Darstellung eines Float-Werts mit einer Länge von 4 Bytes verwendet wird, erfordert, dass Bytes als solche interpretiert werden.
Mit dem unsicheren Paket können die Bytes durch Erstellen als Float32-Wert neu interpretiert werden einen Zeiger auf die uint32-Variable und weist ihn einer float32-Variablen zu.
Ein alternativer Ansatz, der von JimB vorgeschlagen wird, ist die Verwendung des Mathe-Pakets integrierte Funktion, math.Float32frombits(). Diese Funktion wandelt eine vorzeichenlose 32-Bit-Ganzzahl direkt in einen Float32-Wert um, wodurch unsichere Zeigeroperationen überflüssig werden.
Hier ist ein aktualisierter Codeausschnitt, der den Prozess demonstriert:
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) }
Das obige ist der detaillierte Inhalt vonWie konvertiert man Hexadezimalzeichenfolgen in Go effizient in Float32-Werte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!