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十六进制0000或0100不是四个字节,而是两个:
"\x01"== "01"=='1'
因此我可以按照建议使用0100或0200:
var LEFT []byte{1,0}
// or
var LEFT []byte("\x01\x00")
Run Code Online (Sandbox Code Playgroud)
使用以下内容:
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)
| 归档时间: |
|
| 查看次数: |
4039 次 |
| 最近记录: |