Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiert man Go []Byte in Little/Big-Endian Signed Integer oder Float?

Wie konvertiert man Go []Byte in Little/Big-Endian Signed Integer oder Float?

DDD
DDDOriginal
2024-10-31 01:15:03267Durchsuche

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

Go []Byte in Little/Big-Endian Signed Integer oder Float konvertieren

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, &amp;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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn