將[]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, &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中文網其他相關文章!