如何將 Go []byte 轉換為 Little/Big-Endian 有符號整數或浮點數?
處理二進位資料時,這一點至關重要了解位元組順序的概念,位元組順序是指多位元組數值在記憶體中儲存的方式。 Go 的二進位套件提供了方便的函數,用於在大端和小端無符號整數類型(如 Uint16 和 Uint32)之間進行轉換。但是,它缺乏對有符號整數和浮點數的直接支持。
克服此限制的關鍵是分兩步驟完成任務:
轉換為有符號整數
例如,要將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中文網其他相關文章!