我在 python 2.7.3 中使用 bytearray 类型并注意到这个奇怪的行为:
将一个整数参数传递给它的构造函数会创建一个字节数组,其大小等于用零字节填充的整数:
>>> s = bytearray(15)
>>> s
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
但是,如果我尝试创建一个由我手动设置字节的字节数组,构造函数似乎会忽略/跳过我创建的一些字节:
>>> s = bytearray(b'\x34\x78\x98\xFF\xFF')
>>> s
bytearray(b'4x\x98\xff\xff')
为什么会这样?这是一个错误吗?还是我遗漏了什么? The python documentation is not very enlightening .
请您参考如下方法:
没有什么奇怪的事情发生,所有的字节都还在。放松! :)
混淆源于表示略微优化的事实:其值表示可打印字符的字节被打印为这些字符。这使得它们在输出中只使用一个字符,而不是四个。
它按照它说的去做:
\x34是字符4,这就是缓冲区以 '4' 开头的原因\x78是字符x,这就是为什么在 '4之后有一个 'x' '\x98\xff\xff全部保持原样。
请注意 len(s) 输出 5。
史诗般的图形表示:
+---+---+------+------+------+
s = | 4 | x | \x98 | \xff | \xff |
+---+---+------+------+------+
