使用 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())))