Heim > Backend-Entwicklung > Golang > Wie konvertiere ich Go []Byte in vorzeichenbehaftete Little/Big-Endian-Ganzzahlen oder Gleitkommazahlen?

Wie konvertiere ich Go []Byte in vorzeichenbehaftete Little/Big-Endian-Ganzzahlen oder Gleitkommazahlen?

DDD
Freigeben: 2024-10-30 07:42:02
Original
522 Leute haben es durchsucht

 How to Convert Go []byte to Little/Big-Endian Signed Integer or Floating-Point Numbers?

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

Beim Umgang mit Binärdaten ist dies von entscheidender Bedeutung das Konzept der Endianness zu verstehen, das sich auf die Art und Weise bezieht, wie numerische Multibyte-Werte im Speicher gespeichert werden. Das Binärpaket von Go bietet praktische Funktionen zum Konvertieren zwischen vorzeichenlosen Big-Endian- und Little-Endian-Ganzzahltypen wie Uint16 und Uint32. Es fehlt jedoch die direkte Unterstützung für vorzeichenbehaftete Ganzzahlen und Gleitkommazahlen.

Der Schlüssel zur Überwindung dieser Einschränkung besteht darin, die Aufgabe in zwei Schritten anzugehen:

  1. Fügen Sie den numerischen Wert zusammen die gewünschte Byte-Reihenfolge mit BigEndian oder LittleEndian.
  2. Interpretieren Sie die resultierenden Bytes als den entsprechenden vorzeichenbehafteten Ganzzahl- oder Float-Typ.

Konvertieren in vorzeichenbehaftete Ganzzahlen

Um beispielsweise ein uint16 als vorzeichenbehaftetes int16 zu interpretieren, verwenden Sie einfach eine Typkonvertierung, da sie das gleiche Speicherlayout haben:

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

Ähnliche Prinzipien gelten für größere vorzeichenbehaftete Ganzzahltypen wie int64.

Konvertieren in Gleitkommazahlen

Während die Konvertierung vorzeichenloser Ganzzahlen in Gleitkommatypen nicht direkt über eine Typkonvertierung erfolgen kann, bietet das Mathematikpaket von Go speziell dafür entwickelte Funktionen Zweck. Mit diesen Funktionen können Sie vorzeichenlose Ganzzahlen in Gleitkommazahlen und umgekehrt umwandeln, ohne die zugrunde liegende Speicherdarstellung zu ändern:

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)
// To convert back to unsigned integer:
a3 := math.Float64bits(a2)</code>
Nach dem Login kopieren

Alternative mit Binary.Read() und Write()

Die Funktionen „binary.Read“ und „Write“ von Go können verwendet werden, um diese Konvertierungen effizienter durchzuführen, indem direkt auf die zugrunde liegende Speicherdarstellung zugegriffen wird. Schauen Sie sich das Beispiel unten an:

<code class="go">pi := float64(3.141592653589793)
buf := new(bytes.Buffer)
binary.Write(buf, binary.LittleEndian, &pi)

var result float64
binary.Read(buf, binary.LittleEndian, &result)
fmt.Println(result)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Go []Byte in vorzeichenbehaftete Little/Big-Endian-Ganzzahlen oder Gleitkommazahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage