我试图在 Python 3 中构建这个字节对象:
b'3\r\n'
所以我尝试了明显的(对我来说),并发现了一个奇怪的行为:
>>> bytes(3) + b'\r\n'
b'\x00\x00\x00\r\n'
显然:
>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
在阅读文档时,我一直无法看到任何关于字节转换为何以这种方式工作的指针。但是,我确实在这个 Python 问题中发现了一些关于将 format
添加到字节的令人惊讶的消息(另请参见 Python 3 bytes formatting ):
http://bugs.python.org/issue3982
这与现在返回零的字节(int)之类的奇怪交互更差
和:
如果 bytes(int) 返回该 int 的 ASCII 化,对我来说会更方便;但老实说,即使是错误也会比这种行为更好。 (如果我想要这种行为——我从来没有过——我宁愿它是一个类方法,像“bytes.zeroes(n)”一样调用。)
有人可以解释一下这种行为的来源吗?
原文由 astrojuanlu 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 3.5+ 为字节引入了 %-interpolation (
printf
-style 格式) :请参阅 PEP 0461 - 向字节和字节数组添加 % 格式。
在早期版本中,您可以使用
str
和.encode('ascii')
结果:注意:它与
int.to_bytes
产生 的不同: