我对此感到困惑。如何打印十六进制字节:
[0x05, 0x06, 0x40, 0xFD, 0x05]
在控制台中:
05 06 40 FD 05
我将如何在to_string函数中使用它:
def to_string(bytes):
cmd = '%02X'.join(chr(b) for b in self.bytes) #does not work obviously
return cmd
print to_string([0x05, 0x06, 0x40, 0xFD, 0x05])
我想我可以从你的答案中概括出来。
答案 0 :(得分:6)
使用%02X
string formatter:
>>> print '%02X' % 0x05
05
>>> for i in [0x05, 0x06, 0x40, 0xFD, 0x05]:
... print '%02X' % i,
...
05 06 40 FD 05
或使其成为一个字符串:
>>> ' '.join(['%02X' % i for i in [0x05, 0x06, 0x40, 0xFD, 0x05]])
'05 06 40 FD 05'
答案 1 :(得分:0)
Martijn的答案是正确的答案,但这里有一些您可能不熟悉的相关功能。
使用python format
字符串运算符:
>>> for i in [0x05, 0x06, 0x40, 0xFD, 0x05]:
... print "{:02X}".format(i),
...
05 06 40 FD 05
如果您确实将数据作为字节串,则可以使用binascii.hexlify
来执行相同操作。
>>> import binascii
>>> data = ["\x05", "\x06", "\x40", "\xFD", "\x05"]
>>> for d in data:
... print binascii.hexlify(d),
...
05 06 40 fd 05
如果您不介意未填充数据,也可以将内置hex()
与现有数据一起使用。
>>> data = [0x05, 0x06, 0x40, 0xFD, 0x05]
>>> for i in data:
... print hex(i),
...
0x5 0x6 0x40 0xfd 0x5
>>>
>>>
>>> # Or use the slice operator to cut off the initial "0x"
>>> for i in data:
... print hex(i)[2:],
...
5 6 40 fd 5