将字节打印为十六进制

时间:2016-01-09 05:26:03

标签: python python-3.x

我想将字符串编码为字节。

要转换为byes,我使用了byte.fromhex()

>>> byte.fromhex('7403073845')
b't\x03\x078E'

但是它显示了一些角色。

如何以十六进制显示如下?

b't\x03\x078E' => '\x74\x03\x07\x38\x45'

2 个答案:

答案 0 :(得分:2)

无法更改Python repr。如果你想做这样的事情,你需要自己做; bytes个对象正在尝试最小化spew,而不是格式化输出。

如果你想这样打印,你可以这样做:

from itertools import repeat

hexstring = '7403073845'

# Makes the individual \x## strings using iter reuse trick to pair up
# hex characters, and prefixing with \x as it goes
escapecodes = map(''.join, zip(repeat(r'\x'), *[iter(hexstring)]*2))

# Print them all with quotes around them (or omit the quotes, your choice)
print("'", *escapecodes, "'", sep='')

输出完全按照您的要求输出:

'\x74\x03\x07\x38\x45'

答案 1 :(得分:1)

  

我想将字符串编码为字节。

bytes.fromhex()已将十六进制字符串转换为字节。不要混淆对象及其文本表示 - REPL使用sys.displayhook使用repr() 显示字节在ascii可打印范围内作为相应的字符,但它不会#&# 39;以任何方式影响价值:

>>> b't' == b'\x74'
True
  

将字节打印为十六进制

要将字节转换回十六进制字符串,您可以使用binascii.hexlify()

>>> import binascii
>>> binascii.hexlify(b't\x03\x078E').decode('ascii')
'7403073845'
  

如何以十六进制显示如下? b't\x03\x078E' => '\x74\x03\x07\x38\x45'

>>> print(''.join(['\\x%02x' % b for b in b't\x03\x078E']))
\x74\x03\x07\x38\x45