为什么Python bytearray的值> = 256

Jac*_*ack 3 python binary byte

bytearray的Python 文档说明:

bytearray类型是0 <= x <256范围内的可变整数序列.

但是,以下代码建议值可以> = 256.我存储一个9位二进制数,其最大值为: 2^9-1 = 512-1 = 511

ba = bytes([0b111111111])
print '%s' % (ba)
Run Code Online (Sandbox Code Playgroud)

9位二进制数打印为十进制511:

[511]
Run Code Online (Sandbox Code Playgroud)

我不知道预期的行为是什么,但我认为最重要的位将被丢弃以给出8位数.

PM *_*ing 10

你实际上并没有创建一个bytearray或一个bytes对象,你只是创建一个包含的字符串'[511]',因为bytes在Python 2中它只是一个同义词str.在Python 3中,您收到一条错误消息:

ValueError: byte must be in range(0, 256)
Run Code Online (Sandbox Code Playgroud)

以下代码适用于Python 2或Python 3; 请注意,我传递了一个8位数字,所以它在范围内.

ba = bytearray([0b11111111])
print(repr(ba))
Run Code Online (Sandbox Code Playgroud)

产量

bytearray(b'\xff')
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您在 Python 2 中输入 `help(bytes)`,它会显示 `str` 帮助页面。 (2认同)