使用python

时间:2018-08-21 13:30:02

标签: python hex buffer

我想将缓冲区发送到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

我怎么能得到它?

1 个答案:

答案 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())))