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

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

DDD
DDD原創
2024-10-31 01:15:03327瀏覽

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

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

將[]byte 中儲存的二進位資料轉換為數字類型,例如有符號整數或浮點數-點數需要了解位元組順序。 endianness 定義了位元組在記憶體中儲存的順序,常見的格式有兩種:little-endian(最低有效位元組在前)和 big-endian(最高有效位元組在前)。

雖然 Go 二進位套件提供了像 LittleEndian.Uint16() 這樣用於將 []byte 轉換為無符號整數的函數,有符號整數 (Int16()) 沒有直接等價的函數。這是因為位元組順序僅影響資料的解釋,而不影響其在記憶體中的實際表示。

要將無符號整數轉換為有符號整數,簡單的型別轉換就足夠了,因為它們共享相同的記憶體佈局。例如:

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

同樣,您可以使用數學包函數 Float32frombits() 和 Float64frombits() 將無符號整數轉換為浮點數。

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

二進位套件也提供了 Read() 和 Write() 函數,可以在背景執行這些轉換。

<code class="go">import "bytes"

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

buf := bytes.NewReader(b)
var pi float64
err := binary.Read(buf, binary.LittleEndian, &amp;pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi)

// Using Read() produces the same result as using Uint64() and Float64frombits():
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)

// Output:
// 3.141592653589793
// 3.141592653589793</code>

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

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