定义一个不带hex.DecodeString的[] byte

Nev*_*ore 3 string byte go slice

我正在使用HID驱动程序,该驱动程序将[]byte一些不同报告之一读入缓冲区。当我使用时hex.EncodeToString(buffer),它将返回一个类似于0000or或0100or 的字符串0200,我想使用开关根据HID设备的输入进行检查,因此我想在之外预先定义这些可能性,main()我应该如何确定?继续?

我尝试了以下可能性:

var LEFT []byte = []byte('0000')
// or
var LEFT []byte = `0000`
// or 
var LEFT []byte = '0000'
// or
var LEFT []byte = '\x00\x00' // from the %q Printf verb
Run Code Online (Sandbox Code Playgroud)

另一种方法是hex.DecodeString("0000")在main()函数中调用。

编辑

关于提供的解决方案的注释,EncodeToString十六进制00000100不是四个字节,而是两个

"\x01"== "01"=='1'

因此我可以按照建议使用0100或0200:

var LEFT []byte{1,0}
// or 
var LEFT []byte("\x01\x00")
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 6

使用以下内容:

var (
    left = []byte{0, 0}
    right = []byte{1, 0}
    // ... and so on
)
Run Code Online (Sandbox Code Playgroud)

如果要用十六进制写:

var (
    left = []byte{0x00, 0x00}
    right = []byte{0x01, 0x00}
    // ... and so on
)
Run Code Online (Sandbox Code Playgroud)

您还可以将字符串转换为[] byte:

var (
    left = []byte("\x00\x00")
    right = []byte("\x01\x00")
)
Run Code Online (Sandbox Code Playgroud)

在这样的switch语句中使用这些变量:

switch {
case bytes.Equal(v, left):
    fmt.Println("left")
case bytes.Equal(v, right): 
    fmt.Println("right"
}
Run Code Online (Sandbox Code Playgroud)

看来您正在使用以Little-Endian格式编码的2个字节数字。如果是这样,您可以将字节解码为整数

const (
    left = 0
    right = 1
)

switch binary.LittleEndian.Uint16(byteSlice) {
case left:
    fmt.Println("left")
case right:
    fmt.Println("right")
}
Run Code Online (Sandbox Code Playgroud)