Go 中將位元組數組轉換為有符號整數和浮點數
在Go 中,二進位包提供了從[]byte轉換無符號整數的函數數組,例如binary.LittleEndian.Uint16()和binary.BigEndian.Uint32()。然而,有符號整數或浮點數沒有直接等價物。
缺少有符號整數轉換函數的原因
缺少有符號整數轉換函數的主要原因是事實上,將二進位表示解釋為有符號或無符號值是程式邏輯的問題。 []byte 陣列本身僅包含原始二進位數據,可以根據應用程式的要求將其解釋為有符號或無符號。
如何轉換為有符號整數
要將無符號整數值轉換為有符號整數,可以使用簡單的型別轉換。由於相同大小的無符號和有符號整數的記憶體佈局相同,因此使用 int16(a) 將 a 從 uint16 轉換為 int16 將保留原始二進位表示形式,同時分配適當的符號。
轉換為浮點數
從無符號整數轉換為浮點數需要更多的參與。 math 套件提供了用於此目的的函數:math.Float32frombits() 和 math.Float64frombits()。相反,math.Float32bits() 和 math.Float64bits() 可用來取得浮點數值的無符號整數表示形式。
使用Binary.Read() 和Binary.Write()
二進位套件也包含Read() 和Write() 函數,它們可以在後台更有效地執行這些轉換。這些函數允許您直接讀取類型值,而無需中間類型轉換。
使用Binary.Read() 進行浮點轉換的範例
考慮以下內容例如:
b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi) // Output: 3.141592653589793
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3