我想将缓冲区发送到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,6,4,26,0,0,11,184,0,0,0,0,0,0,0,0,0]
我还应该将十进制转换为十六进制,例如将1000转换为十六进制。
print(hex(1000))
它给出:
0x3e8
我想要:
03 E8
我怎么能得到它?
答案 0 :(得分:0)
首先,当您编写这些行时:
buffer[0:10] = {0x00,0x00,0x11,0x06,0x00,0x04,0x1A,0x00,0x00,0x0b,0xb8}
print(buffer)
您使用了括号{},因此您为列表buffer
的切片[0:10]分配了 set 。而且您必须知道:
因此,赋值将索引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())))