Heim > Artikel > Backend-Entwicklung > Wie konvertiert man Go []Byte in Little/Big-Endian Signed Integer oder Float?
Konvertieren von in []Byte gespeicherten Binärdaten in numerische Typen wie vorzeichenbehaftete Ganzzahlen oder Floating- Punktzahlen erfordern ein Verständnis der Endianness. Die Endianness definiert die Reihenfolge, in der Bytes im Speicher gespeichert werden, wobei zwei gängige Formate Little-Endian (niederwertiges Byte zuerst) und Big-Endian (höchstwertiges Byte zuerst) sind.
Während das Go-Binärpaket Folgendes bietet Funktionen wie LittleEndian.Uint16() zum Konvertieren von []byte in vorzeichenlose Ganzzahlen gibt es keine direkten Äquivalente für vorzeichenbehaftete Ganzzahlen (Int16()). Dies liegt daran, dass Endianness nur die Interpretation der Daten beeinflusst, nicht aber deren tatsächliche Darstellung im Speicher.
Um eine vorzeichenlose Ganzzahl in eine vorzeichenbehaftete Ganzzahl umzuwandeln, reicht eine einfache Typkonvertierung aus, da beide das gleiche Speicherlayout haben. Zum Beispiel:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
Ähnlich können Sie eine vorzeichenlose Ganzzahl in eine Gleitkommazahl umwandeln, indem Sie die Mathematikpaketfunktionen Float32frombits() und Float64frombits() verwenden.
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a)</code>
Die Binärdatei Das Paket bietet außerdem die Funktionen Read() und Write(), die diese Konvertierungen unter der Haube durchführen können.
<code class="go">import "bytes" b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(b) var pi float64 err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Println(pi) // Using Read() produces the same result as using Uint64() and Float64frombits(): a := binary.LittleEndian.Uint64(b) a2 := math.Float64frombits(a) fmt.Println(a2) // Output: // 3.141592653589793 // 3.141592653589793</code>
Das obige ist der detaillierte Inhalt vonWie konvertiert man Go []Byte in Little/Big-Endian Signed Integer oder Float?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!