2016-07-30 49 views

回答

6

您可以使用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 
} 

我希望這有助於。

4

兩個字節合併成UINT16

x := uint16(numBytes[i])<<8 | uint16(numBytes[i+1]) 

i哪裏是UINT16的起始位置。因此,如果你的數組總是隻有兩個項目,它將是x := uint16(numBytes[0])<<8 | uint16(numBytes[1])

+0

完美,我錯過了投到uint16。謝謝! – tt9

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) 

Playground

編輯:只注意到你想要uint16 - 取代int與上面的那個!