Skip to main content
 首页 » 编程设计

python之Python 2 中的字节数组未按预期运行

2025年05月04日11JeffreyZhao

我在 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 | 
    +---+---+------+------+------+