Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich numerische Typen in []Byte und zurück in Go?

Wie konvertiere ich numerische Typen in []Byte und zurück in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 21:42:03419Durchsuche

How to Convert Numeric Types to []byte and Back in Go?

Konvertieren numerischer Typen in []Byte und zurück

In Go können Sie vorzeichenlose Ganzzahlen in ein Byte-Array konvertieren, indem Sie die Methoden Uint16() und Uint32() von verwenden die Typen „binary.BigEndian“ und „binary.LittleEndian“. Möglicherweise ist Ihnen jedoch aufgefallen, dass es keine entsprechenden Int16()- oder Float32()-Methoden gibt.

Endianness und numerische Typen

Endianness bezieht sich auf die Reihenfolge, in der Bytes für einen bestimmten Wert im Speicher gespeichert werden numerischer Typ. Das Binärpaket von Go bietet Funktionen zum Konvertieren zwischen verschiedenen Endiannesses.

Konvertieren in vorzeichenbehaftete Ganzzahlen

Um eine vorzeichenlose Ganzzahl in eine vorzeichenbehaftete Ganzzahl umzuwandeln, können Sie eine einfache Typkonvertierung verwenden. Das Speicherlayout einer vorzeichenlosen 16-Bit-Ganzzahl (uint16) und einer vorzeichenbehafteten 16-Bit-Ganzzahl (int16) ist dasselbe. Daher können Sie die folgende Konvertierung durchführen:

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>

Diese Konvertierung ändert nicht die Speicherdarstellung, sondern nur den Typ.

Konvertierung in Gleitkommazahlen

Konvertierung Die Umwandlung vorzeichenloser Ganzzahlen in Gleitkommazahlen ist etwas aufwändiger. Das Mathematikpaket von Go bietet Funktionen zum Konvertieren zwischen vorzeichenlosen Ganzzahlen und Gleitkommazahlen, wie zum Beispiel math.Float32frombits() und math.Float64frombits().

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>

Diese Konvertierung manipuliert den Speicherwert nicht, sondern „sieht“ ihn stattdessen an als anderer Typ unter Verwendung des unsicheren Pakets.

Verwendung von „binary.Read()“ und „binary.Write()“

Das Binärpaket stellt auch die Funktionen „Read()“ und „Write()“ bereit, die diese ausführen Umbauten unter der Haube. Mit diesen Funktionen können Sie zwischen verschiedenen numerischen Typen und Byte-Arrays konvertieren.

<code class="go">var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)

// or

a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)</code>

In diesem Beispiel enthält das Eingabe-Byte-Array den Wert von pi im Little-Endian-Format. Die Funktion Read() konvertiert das Byte-Array in einen float64-Wert, während Uint64() und Float64frombits() die Konvertierung manuell durchführen.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich numerische Typen in []Byte und zurück in Go?. 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