Go 中將二進位位元組轉換為有符號整數和浮點數
Go 中,二進位包提供了轉換位元組切片( []byte)的方法) 轉換為無符號整數(例如Uint16、Uint32)。但是,沒有明確的方法將位元組切片轉換為有符號整數或浮點數。
為什麼省略?
中缺少有符號整數和浮點數轉換方法二進位包可能是由於位元組順序影響數字類型從位元組解釋的方式。位元組順序是指位元組在記憶體中儲存的順序。根據系統架構,位元組可以以小端(最低有效位元組在前)或大端(最高有效位元組在前)的形式排列。
轉換為有符號整數
儘管缺乏專用方法,但可以透過型別轉換來實現將 []byte 轉換為有符號整數。由於無符號和有符號整數具有相同的記憶體佈局,因此轉換非常簡單:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a) // Convert to signed int16</code>
類似地,您可以將 uint64 值轉換為 int64 值。
轉換為浮點數
將無符號整數轉換為浮點數涉及更多。雖然您可以嘗試簡單的類型轉換,但它會導致轉換數值,而不是記憶體表示形式。
相反,請使用math 套件提供的函數:
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // Convert to float64</code>
要將浮點值轉換為具有相同記憶體佈局的無符號整數,請使用:
<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>
Read() 和Write() 便利函數
二進位套件也提供Read() 和Write() 函數可以在背景執行這些轉換。例如:
<code class="go">var pi float64 buf := bytes.NewReader(sampleA) err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { panic(err) }</code>
以上是如何在 Go 中將二進位位元組轉換為有符號整數和浮點數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!