Go - 将2字节数组转换为uint16值

时间:2016-07-30 14:56:21

标签: go byte

如果我在Go中有一片字节,则类似于:

numBytes := []byte { 0xFF, 0x10 }

如何将其转换为uint16值(0xFF10,65296)?

3 个答案:

答案 0 :(得分:8)

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

我希望这会有所帮助。

答案 1 :(得分:5)

将两个字节组合成uint16

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

其中i是uint16的起始位置。因此,如果您的数组始终只有两个项目,则为x := uint16(numBytes[0])<<8 | uint16(numBytes[1])

答案 2 :(得分: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替换为上面的内容!