我想将使用pyusb通过USB接收的整数值数组转换为十六进制值列表。我希望这些十六进制值总是有两个字节,即0x ##。但是正常的hex()函数将返回0x1,输入为1.我希望它返回0x01。
然后在获得十六进制值列表之后,我想将它们附加在一起,同时丢弃'0x'部分。这就是我现在所拥有的,非常简单。
data_read = dev.read(0x82,64,0,1000)
hex_data = range(0,len(data_read))
for i in range(0,len(data_read)):
hex_data[i] = hex(data_read[i])
有什么想法吗?我可以捏造它并以邋way的方式做,但我希望有一个合适的方法来做到这一点。谢谢。
更新
data_read = dev.read(0x82,64)
print data_read
>>> array('B', [169, 86, 128, 1, 0, 128])
for i in range(0,len(data_read)):
hex_data[i] = hex(data_read[i])
print hex_data
>>> ['0xa9', '0x56', '0x80', '0x1', '0x0', '0x80']
Lavon建议的方法不起作用,因为生成的十六进制值在我的代码中是技术上的字符串?相反,我只是跳过我的整个循环转换为十六进制,并直接做了拉文和moooeeeep建议,它的工作!谢谢!
hex_data = ('%02x' %i for i in data_read)
print ''.join(hex_data)
>>> a95680010080
您使用的语法是否很好?即你使用'%02x'?我之前没有见过,想要更好地理解它。
答案 0 :(得分:1)
然后在获得十六进制值列表之后,我想将它们附加在一起,同时丢弃'0x'部分。
你的意思是这样的:
In [8]: data_read = [0x01, 0x2b, 0x22, 0x10]
In [9]: ''.join(map(lambda v: '%02x' % v, data_read))
Out[9]: '012b2210'
答案 1 :(得分:1)
这是否符合要求?
data = [0x1, 0x4, 0x5, 0xFF, 0x12]
new_data = ['%02X' %i for i in data]
print ''.join(new_data)
的产率:
010405FF12
使用列表理解和连接操作。
或者,正如@moooeeeep所建议的那样是使用生成器的解决方案:
new_data = ('%02X' %i for i in data)
print ''.join(new_data)
有关字符串格式选项,请参阅this
答案 2 :(得分:0)
另一种方法
>>> data_read = [0x01, 0x2b, 0x22, 0x10]
>>> ("{:02x}"*len(data_read)).format(*data_read)
'012b2210'