Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich Binärbytes in vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen in Go?

Wie konvertiere ich Binärbytes in vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen in Go?

DDD
DDDOriginal
2024-10-31 09:54:02379Durchsuche

How to Convert Binary Bytes to Signed Integers and Floats in Go?

Binärbytes in vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen in Go konvertieren

In Go bietet das Binärpaket Methoden zum Konvertieren von Byte-Slices ([]byte ) in vorzeichenlose Ganzzahlen (z. B. Uint16, Uint32). Es gibt jedoch keine expliziten Methoden zum Konvertieren von Byte-Slices in vorzeichenbehaftete Ganzzahlen oder Gleitkommazahlen.

Warum das Auslassen?

Das Fehlen von vorzeichenbehafteten Ganzzahl- und Gleitkomma-Konvertierungsmethoden in Das liegt wahrscheinlich daran, dass Endianness die Art und Weise beeinflusst, wie numerische Typen aus Bytes interpretiert werden. Endianness bezieht sich auf die Reihenfolge, in der Bytes im Speicher gespeichert werden. Abhängig von der Systemarchitektur können Bytes in Little-Endian (niederwertiges Byte zuerst) oder Big-Endian (höchstwertiges Byte zuerst) angeordnet werden.

Konvertierung in vorzeichenbehaftete Ganzzahlen

Trotz des Fehlens dedizierter Methoden kann die Konvertierung von []Byte in vorzeichenbehaftete Ganzzahlen durch Typkonvertierung erreicht werden. Da vorzeichenlose und vorzeichenbehaftete Ganzzahlen das gleiche Speicherlayout haben, ist die Konvertierung unkompliziert:

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

Ebenso können Sie uint64-Werte in int64-Werte konvertieren.

Konvertierung in Floats

Die Konvertierung vorzeichenloser Ganzzahlen in Gleitkommazahlen ist aufwändiger. Sie könnten zwar versuchen, eine einfache Typkonvertierung durchzuführen, dies würde jedoch dazu führen, dass der numerische Wert konvertiert wird, nicht die Speicherdarstellung.

Verwenden Sie stattdessen die vom Mathematikpaket bereitgestellten Funktionen:

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

Um Float-Werte in vorzeichenlose Ganzzahlen mit demselben Speicherlayout umzuwandeln, verwenden Sie:

<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>

Komfortfunktionen „Read()“ und „Write()“

Das Binärpaket bietet außerdem Folgendes Read()- und Write()-Funktionen, die diese Konvertierungen unter der Haube durchführen können. Zum Beispiel:

<code class="go">var pi float64
buf := bytes.NewReader(sampleA)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
    panic(err)
}</code>

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Binärbytes in vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen 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