这些符号'bytes'类型是什么?



那么,我有一个字节格式的字节,看起来像这样:

b'xFF'

很容易理解,单个字节是'x'后面的两个符号(0-F)

但有时模式不匹配,在'x'后包含两个以上的符号。

因此,例如,如果我使用secrets.token_bytes()我可以得到这样的东西:
>>> import secrets
>>> secrets.token_bytes(32)
b'txbcJxf0'

或者使用hashlib模块:

>>> import hashlib
>>> hashlib.sha256('abc'.encode()).digest()
b'xbaxx16xbfx8fx01xcfxeaAA@xde]xae"#xb0x03axa3x96x17zx9cxb4x10xffaxf2x00x15xad'

那么,有人能解释一下这些额外符号的目的是什么以及它们是如何产生的吗?谢谢!

这是Python打印字节字符串的一个怪癖。如果字节值是一个可打印的ASCII字符,它将打印该字符;否则输出十六进制转义。

显示bytes(range(0x100)),以直观地看到它。

要获得一个始终使用十六进制转义的字符串,您需要自己构建它。

print(''.join(f'\x{i:02x}' for i in bytes(range(0x100))))

最新更新