使用 python 将缓冲区发送到 HID
Sending buffer to HID with python
我想向 HID 发送缓冲区,但我在创建缓冲区时遇到了问题,这是我的代码:
buffer = [0x00]*20
print(buffer)
buffer[0:10] = {0x00,0x00,0x11,0x06,0x00,0x04,0x1A,0x00,0x00,0x0b,0xb8}
print(buffer)
输出为:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 4, 6, 11, 17, 184, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但是当我使用这个时:
buffer[0] = 0x00
buffer[1] = 0x00
buffer[2] = 0x11
buffer[3] = 0x06
buffer[4] = 0x00
buffer[5] = 0x04
buffer[6] = 0x1A
buffer[7] = 0x00
buffer[8] = 0x00
buffer[9] = 0x0b
buffer[10] = 0xb8
输出为:
[0, 0, 17, 6, 0, 4, 26, 0, 0, 11, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我还应该将十进制转换为十六进制,例如 1000 转换为十六进制。
print(hex(1000))
它给出:
0x3e8
我想要:
03 E8
我怎样才能拥有它?
首先,当你写下这些行时:
buffer[0:10] = {0x00,0x00,0x11,0x06,0x00,0x04,0x1A,0x00,0x00,0x0b,0xb8}
print(buffer)
您使用了大括号 {},因此您将 set 分配给列表 [=12] 的切片 [0:10] =].你必须知道:
- 一套未订购,
- 集合不存储重复值
因此,赋值将索引为 0 到 9 的值(因此前 10 个值)替换为无序的 7 个值 0x00、0x11、0x06、0x04、0x1A、0x0b、0xb8。这就是你观察到的。
其次,当你写像buffer[0] = 0x00
这样的行时,你直接将列表的第一个元素赋给了值0x00,所以没有什么奇怪的。
最后,为了回答你的最后一个问题并将“1000”打印为“03 E8”,我建议你这个解决方案:
import re
print(" ".join(re.findall(r'..',(1000).to_bytes(2,'big').hex().upper())))
我想向 HID 发送缓冲区,但我在创建缓冲区时遇到了问题,这是我的代码:
buffer = [0x00]*20
print(buffer)
buffer[0:10] = {0x00,0x00,0x11,0x06,0x00,0x04,0x1A,0x00,0x00,0x0b,0xb8}
print(buffer)
输出为:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 4, 6, 11, 17, 184, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但是当我使用这个时:
buffer[0] = 0x00
buffer[1] = 0x00
buffer[2] = 0x11
buffer[3] = 0x06
buffer[4] = 0x00
buffer[5] = 0x04
buffer[6] = 0x1A
buffer[7] = 0x00
buffer[8] = 0x00
buffer[9] = 0x0b
buffer[10] = 0xb8
输出为: [0, 0, 17, 6, 0, 4, 26, 0, 0, 11, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我还应该将十进制转换为十六进制,例如 1000 转换为十六进制。
print(hex(1000))
它给出:
0x3e8
我想要:
03 E8
我怎样才能拥有它?
首先,当你写下这些行时:
buffer[0:10] = {0x00,0x00,0x11,0x06,0x00,0x04,0x1A,0x00,0x00,0x0b,0xb8}
print(buffer)
您使用了大括号 {},因此您将 set 分配给列表 [=12] 的切片 [0:10] =].你必须知道:
- 一套未订购,
- 集合不存储重复值
因此,赋值将索引为 0 到 9 的值(因此前 10 个值)替换为无序的 7 个值 0x00、0x11、0x06、0x04、0x1A、0x0b、0xb8。这就是你观察到的。
其次,当你写像buffer[0] = 0x00
这样的行时,你直接将列表的第一个元素赋给了值0x00,所以没有什么奇怪的。
最后,为了回答你的最后一个问题并将“1000”打印为“03 E8”,我建议你这个解决方案:
import re
print(" ".join(re.findall(r'..',(1000).to_bytes(2,'big').hex().upper())))