显示所有字节的十六进制值,即使存在 ASCII 字符

Sta*_*tec 16 python

至少在 Python (3) 中,如果二进制值具有 ASCII 表示,则会显示它而不是十六进制值。例如,67ASCII的二进制值C如下所示:

bytes([67]) # b'C'
Run Code Online (Sandbox Code Playgroud)

而对于没有 ASCII 表示的二进制值,它们以十六进制显示。IE

b'\x0f'
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 Python 以二进制十六进制形式显示二进制值(如果这就是所谓的),即使有 ASCII 表示?

编辑:我的意思是,以 , 开头的东西b'\x'。例如,当您寻找要打印的特定字节时,这将使调试更容易。

谢谢

wim*_*wim 5

安装我的软件包后,all-escapes将有一个新的编解码器可用于此用途。

>>> b = bytes([10,67,128])
>>> print(b.decode("all-escapes"))
\x0a\x43\x80
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 4

没有特定的方法要求\x字节字符串具有任何特定的格式(例如 )。如果您确实需要特定的格式,您可以使用类似于此问题.hex()的解决方案,但用其他代码包装它以插入您需要的格式。另一个有用的工具是内置函数。例如,如果您想要:hex\x

>>> x = bytes([67, 128])
>>> print(''.join(r'\x'+hex(letter)[2:] for letter in x))
\x43\x80
Run Code Online (Sandbox Code Playgroud)

如果您只需要能够在视觉上区分字节,则 usinghex本身可能适合您(它使用0x而不是\x):

>>> print(''.join(hex(letter) for letter in x))
0x430x80
Run Code Online (Sandbox Code Playgroud)

没有办法使它成为字节字符串的默认行为。无论你做什么,你都必须编写代码来指定你想要的显示格式;你不能让Python自动将可打印字节显示为\x转义符。

  • 然而,对于十六进制值 < x10 的字符,这将失败。如果你执行 `x = bytes([10,67,128])` 你会得到 `\xa\x43\x80` ,它是无效的,它需要是 `\x0a\x43\x80` 我建议更改为: `print(''.join('\\x{:02x}'.format(letter) for letter in x))` (7认同)