Heim > Artikel > Backend-Entwicklung > Wie konvertiere ich Go []Byte in vorzeichenbehaftete Little/Big-Endian-Ganzzahlen oder Gleitkommazahlen?
Wie konvertiert man Go []byte in Little/Big-Endian Signed Integer oder Float?
Beim Umgang mit Binärdaten ist dies von entscheidender Bedeutung das Konzept der Endianness zu verstehen, das sich auf die Art und Weise bezieht, wie numerische Multibyte-Werte im Speicher gespeichert werden. Das Binärpaket von Go bietet praktische Funktionen zum Konvertieren zwischen vorzeichenlosen Big-Endian- und Little-Endian-Ganzzahltypen wie Uint16 und Uint32. Es fehlt jedoch die direkte Unterstützung für vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen.
Der Schlüssel zur Überwindung dieser Einschränkung besteht darin, die Aufgabe in zwei Schritten anzugehen:
Konvertieren in vorzeichenbehaftete Ganzzahlen
Um beispielsweise ein uint16 als vorzeichenbehaftetes int16 zu interpretieren, verwenden Sie einfach eine Typkonvertierung, da sie das gleiche Speicherlayout haben:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
Ähnliche Prinzipien gelten für größere vorzeichenbehaftete Ganzzahltypen wie int64.
Konvertieren in Gleitkommazahlen
Während die Konvertierung vorzeichenloser Ganzzahlen in Gleitkommatypen nicht direkt über eine Typkonvertierung erfolgen kann, bietet das Mathematikpaket von Go speziell dafür entwickelte Funktionen Zweck. Mit diesen Funktionen können Sie vorzeichenlose Ganzzahlen in Gleitkommazahlen und umgekehrt umwandeln, ohne die zugrunde liegende Speicherdarstellung zu ändern:
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // To convert back to unsigned integer: a3 := math.Float64bits(a2)</code>
Alternative mit Binary.Read() und Write()
Die Funktionen „binary.Read“ und „Write“ von Go können verwendet werden, um diese Konvertierungen effizienter durchzuführen, indem direkt auf die zugrunde liegende Speicherdarstellung zugegriffen wird. Schauen Sie sich das Beispiel unten an:
<code class="go">pi := float64(3.141592653589793) buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &pi) var result float64 binary.Read(buf, binary.LittleEndian, &result) fmt.Println(result)</code>
Das obige ist der detaillierte Inhalt vonWie konvertiere ich Go []Byte in vorzeichenbehaftete Little/Big-Endian-Ganzzahlen oder Gleitkommazahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!