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

tt9*_*tt9 6 byte go

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

numBytes := []byte { 0xFF, 0x10 }
Run Code Online (Sandbox Code Playgroud)

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

小智 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
}
Run Code Online (Sandbox Code Playgroud)

在里面看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
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


ain*_*ain 5

将两个字节合并为uint16

x := uint16(numBytes[i])<<8 | uint16(numBytes[i+1])
Run Code Online (Sandbox Code Playgroud)

iuint16的起始位置在哪里。因此,如果您的数组总是只有两个项目,那么它将是x := uint16(numBytes[0])<<8 | uint16(numBytes[1])