我想将字符串编码为字节。
为了转换为再见,我使用了byte.fromhex()
>>> byte.fromhex('7403073845')
b't\x03\x078E'
Run Code Online (Sandbox Code Playgroud)
但它显示了一些字符。
如何将其显示为如下所示的十六进制?
b't\x03\x078E' => '\x74\x03\x07\x38\x45'
Run Code Online (Sandbox Code Playgroud)
我想将字符串编码为字节。
bytes.fromhex()已经将您的十六进制字符串转换为字节。不要混淆对象及其文本表示形式——REPL 使用sys.displayhook它来repr()将ascii 可打印范围中的字节显示为相应的字符,但它不会以任何方式影响该值:
>>> b't' == b'\x74'
True
Run Code Online (Sandbox Code Playgroud)
将字节打印为十六进制
要将字节转换回十六进制字符串,您可以使用bytes.hexPython 3.5 以来的方法:
>>> b't\x03\x078E'.hex()
'7403073845'
Run Code Online (Sandbox Code Playgroud)
在较旧的 Python 版本上,您可以使用binascii.hexlify():
>>> import binascii
>>> binascii.hexlify(b't\x03\x078E').decode('ascii')
'7403073845'
Run Code Online (Sandbox Code Playgroud)
如何将其显示为如下所示的十六进制?
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
Run Code Online (Sandbox Code Playgroud)
Pythonrepr无法更改。如果你想做这样的事情,你需要自己做;bytes对象正在尝试最大限度地减少溢出,而不是为您格式化输出。
如果你想像这样打印它,你可以这样做:
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='')
Run Code Online (Sandbox Code Playgroud)
输出完全按照您的要求:
'\x74\x03\x07\x38\x45'
Run Code Online (Sandbox Code Playgroud)