首頁  >  文章  >  後端開發  >  如何將 Go []byte 轉換為 Little/Big-Endian 有符號整數或浮點數?

如何將 Go []byte 轉換為 Little/Big-Endian 有符號整數或浮點數?

DDD
DDD原創
2024-10-30 07:42:02472瀏覽

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

如何將 Go []byte 轉換為 Little/Big-Endian 有符號整數或浮點數?

處理二進位資料時,這一點至關重要了解位元組順序的概念,位元組順序是指多位元組數值在記憶體中儲存的方式。 Go 的二進位套件提供了方便的函數,用於在大端和小端無符號整數類型(如 Uint16 和 Uint32)之間進行轉換。但是,它缺乏對有符號整數和浮點數的直接支持。

克服此限制的關鍵是分兩步驟完成任務:

  1. 組裝數值使用 BigEndian 或 LittleEndian 指定所需的位元組順序。
  2. 將結果位元組解釋為適當的有符號整數或浮點類型。

轉換為有符號整數

例如,要將uint16 解釋為有符號int16,只需使用類型轉換,因為它們共享相同的記憶體佈局:

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

類似的原則適用於像int64 這樣的較大有符號整數類型。

轉換為浮點數

雖然無法直接透過型別轉換將無符號整數轉換為浮點數類型,但Go 的math 套件提供了專門為此設計的函數目的。這些函數允許您將無符號整數轉換為浮點數,反之亦然,而無需更改底層記憶體表示:

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

替代使用binary.Read()和Write()

Go 的binary.Read 和Write 函數可以透過直接存取底層記憶體表示來更有效地執行這些轉換。看看下面的範例:

<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>

以上是如何將 Go []byte 轉換為 Little/Big-Endian 有符號整數或浮點數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn