gpt4 book ai didi

string - 定义一个没有 hex.DecodeString 的 []byte

转载 作者:IT王子 更新时间:2023-10-29 00:52:20 25 4
gpt4 key购买 nike

我正在使用 HID 驱动程序,该驱动程序读取几个不同报告之一的 []byte 缓冲区。当我使用 hex.EncodeToString(buffer) 时,它将返回一个看起来像 000001000200 的字符串> 等。我想使用开关检查来自 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

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

编辑

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

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

所以我可以使用,以便按照建议获得 0100 或 0200:

var LEFT []byte{1,0}
// or
var LEFT []byte("\x01\x00")

最佳答案

使用以下内容:

var (
left = []byte{0, 0}
right = []byte{1, 0}
// ... and so on
)

如果你想写成十六进制:

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

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

var (
left = []byte("\x00\x00")
right = []byte("\x01\x00")
)

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

switch {
case bytes.Equal(v, left):
fmt.Println("left")
case bytes.Equal(v, right):
fmt.Println("right"
}

看起来您正在处理以小端格式编码的 2 字节数字。如果是这样,你可以decode the bytes to an integer :

const (
left = 0
right = 1
)

switch binary.LittleEndian.Uint16(byteSlice) {
case left:
fmt.Println("left")
case right:
fmt.Println("right")
}

关于string - 定义一个没有 hex.DecodeString 的 []byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com