如果我有個字節的圍棋片,與此類似:圍棋 - 轉換2字節數組成UINT16值
numBytes := []byte { 0xFF, 0x10 }
我將如何將其轉化爲它的uint16
值(0xFF10,65296)?
如果我有個字節的圍棋片,與此類似:圍棋 - 轉換2字節數組成UINT16值
numBytes := []byte { 0xFF, 0x10 }
我將如何將其轉化爲它的uint16
值(0xFF10,65296)?
您可以使用binary.BigEndian.Uint16(numBytes)
這樣的工作示例代碼(帶有註釋輸出):
package main
import (
"encoding/binary"
"fmt"
)
func main() {
numBytes := []byte{0xFF, 0x10}
u := binary.BigEndian.Uint16(numBytes)
fmt.Printf("%#X %[1]v\n", u) // 0XFF10 65296
}
,看看裏面binary.BigEndian.Uint16(b []byte)
:
func (bigEndian) Uint16(b []byte) uint16 {
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
return uint16(b[1]) | uint16(b[0])<<8
}
我希望這有助於。
兩個字節合併成UINT16
x := uint16(numBytes[i])<<8 | uint16(numBytes[i+1])
i
哪裏是UINT16的起始位置。因此,如果你的數組總是隻有兩個項目,它將是x := uint16(numBytes[0])<<8 | uint16(numBytes[1])
首先,你有一個切片而不是一個數組 - 一個數組有一個固定的大小,將被宣佈是這樣的[2]byte
。
如果你只是有一個2個字節的片,我不會做任何幻想,我只是做
numBytes := []byte{0xFF, 0x10}
n := int(numBytes[0])<<8 + int(numBytes[1])
fmt.Printf("n =0x%04X = %d\n", n, n)
編輯:只注意到你想要uint16
- 取代int
與上面的那個!
完美,我錯過了投到uint16。謝謝! – tt9