Skip to main content
 首页 » 编程设计

Python bytes literal 具有非十六进制的额外字符,但会改变字符串的值

2025年05月04日20傻小

我习惯了将字节表示为十六进制值的 python 字节字面量语法,例如 b'\x7a' 是十六进制值 0x7a。但是,我遇到了一个问题,我不知道它是如何工作的。我第一次使用 ssl 库并使用 ssl.RAND_bytes(...) 创建随机值它返回的字符串包含改变值的字符(比如在执行 int. from_bytes(...)) 我收到的示例字符串:

b'\x12\x1f)\x8b\xe0\xd7LD' 
b'\x808\x8a(\x02\xb3S\xc9\xabW_\n\xf3\xbb\x80o' 
b'\xde\xef\x81%FMB=Ps' 
b'9\x81\x90\xdc\xfa\x98\xbd\x1f^;' 

我不明白的是那些非十六进制值字符,例如 \x81 或 MB=Ps 之前的 9 .我想了解这些额外值代表什么以及在调试代码时如何解释它们。我知道 python 对这些没有问题,是我不知所措。

注意:我是在windows 7 64位的python3.3上

请您参考如下方法:

字节数组表示法将某些值转换为它们的文本表示:

>>> b'\x12\x41\x42' 
b'\x12AB' 

在这种情况下,十六进制数 41 是大写字母 A 的 ASCII 值。