我想将字符串编码为字节。
要转换为byes,我使用了byte.fromhex()
>>> byte.fromhex('7403073845')
b't\x03\x078E'
但是它显示了一些角色。
如何以十六进制显示如下?
b't\x03\x078E' => '\x74\x03\x07\x38\x45'
答案 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