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!