Heim >Backend-Entwicklung >Golang >Wie kann ich Hex-Strings in Go in IEEE-754-Gleitkommawerte konvertieren?
Konvertieren von Hex-Zeichenfolgen in Gleitkommawerte in IEEE-754
Trotz Verwendung der Funktion strconv.ParseFloat werden Hex-Zeichenfolgen in Gleitkommawerte konvertiert kann eine Herausforderung darstellen. In diesem Artikel werden alternative Methoden zum Erreichen dieser Konvertierung mithilfe von strconv.ParseUint und unsicheren Paketen untersucht.
Klärung der Bitlänge
Bevor Sie mit der Konvertierung fortfahren, ist es wichtig, dies zu bestimmen die Bitlänge der eingegebenen Hex-Zeichenfolge. Wie in der Frage erwähnt, besteht die bereitgestellte Hexadezimaldarstellung aus acht Ziffern, was auf einen möglichen Float32-Datentyp hinweist. Um die Genauigkeit sicherzustellen, ist es jedoch am besten, dies mit dem Fragesteller zu klären.
Verwendung von strconv.ParseUint
Um die Bytes aus der Hex-Zeichenfolge zu analysieren, kann strconv.ParseUint beschäftigt sein. Da es jedoch ein uint64 zurückgibt, das acht Bytes im Speicher belegt, muss es in ein uint32 konvertiert werden, um der Vier-Byte-Struktur von float32 zu entsprechen.
s := "C40C5253" n, err := strconv.ParseUint(s, 16, 32) if err != nil { panic(err) } n2 = uint32(n)
Bytes als IEEE-754 Floating interpretieren Punkt
Da die Bytes nun in n2 als uint32 gespeichert sind, müssen sie es sein werden als Bytes einer IEEE-754-Gleitkommazahl interpretiert. Das unsichere Paket bietet eine Möglichkeit, auf Speicherzeiger zuzugreifen und diese zu manipulieren, sodass wir aus den uint32-Bytes ein float32 erstellen können.
f := *(*float32)(unsafe.Pointer(&n2))
Alternative Methode mit math.Float32frombits
Das Mathe-Paket enthält eine integrierte Funktion, die speziell für diesen Zweck entwickelt wurde: math.Float32frombits. Es übersetzt einen uint32-Wert direkt in einen float32-Wert und bietet so einen einfacheren Ansatz.
f := math.Float32frombits(n2)
Ausgabe
Bei Verwendung einer der beiden Methoden wird die in der Frage bereitgestellte Beispiel-Hex-Zeichenfolge verwendet konvertiert in -561,2863, wenn es als float32 interpretiert wird. Das Testen dieser Lösung auf dem Go Playground kann ihre Funktionalität weiter demonstrieren.
Das obige ist der detaillierte Inhalt vonWie kann ich Hex-Strings in Go in IEEE-754-Gleitkommawerte konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!