'bytes' 类型中的这些符号是什么?
What are these symbols in 'bytes' type?
所以,我有一个字节格式的单字节看起来像这样:
b'\xFF'
一个字节就是'\x'后的两个符号(0-F)
但有时模式不匹配,在'\x'后包含两个以上的符号。
所以,例如,如果我使用 secrets.token_bytes() 我可以得到类似的东西:
>>> import secrets
>>> secrets.token_bytes(32)
b't\xbcJ\xf0'
或者,使用 hashlib 模块:
>>> import hashlib
>>> hashlib.sha256('abc'.encode()).digest()
b'\xbax\x16\xbf\x8f\x01\xcf\xeaAA@\xde]\xae"#\xb0\x03a\xa3\x96\x17z\x9c\xb4\x10\xffa\xf2\x00\x15\xad'
那么,有人可以解释一下这些附加符号的用途是什么以及它们是如何生成的吗?
谢谢!
这是 Python 打印字节字符串的方式的一个怪癖。如果字节值是可打印的 ASCII 字符之一,它将打印该字符;否则它会打印十六进制转义符。
显示bytes(range(0x100))
以直观地看到它。
要获得始终使用十六进制转义的字符串,您需要自己构建它。
print(''.join(f'\x{i:02x}' for i in bytes(range(0x100))))
所以,我有一个字节格式的单字节看起来像这样:
b'\xFF'
一个字节就是'\x'后的两个符号(0-F)
但有时模式不匹配,在'\x'后包含两个以上的符号。
所以,例如,如果我使用 secrets.token_bytes() 我可以得到类似的东西:
>>> import secrets
>>> secrets.token_bytes(32)
b't\xbcJ\xf0'
或者,使用 hashlib 模块:
>>> import hashlib
>>> hashlib.sha256('abc'.encode()).digest()
b'\xbax\x16\xbf\x8f\x01\xcf\xeaAA@\xde]\xae"#\xb0\x03a\xa3\x96\x17z\x9c\xb4\x10\xffa\xf2\x00\x15\xad'
那么,有人可以解释一下这些附加符号的用途是什么以及它们是如何生成的吗? 谢谢!
这是 Python 打印字节字符串的方式的一个怪癖。如果字节值是可打印的 ASCII 字符之一,它将打印该字符;否则它会打印十六进制转义符。
显示bytes(range(0x100))
以直观地看到它。
要获得始终使用十六进制转义的字符串,您需要自己构建它。
print(''.join(f'\x{i:02x}' for i in bytes(range(0x100))))