不理解字节整数限制

时间:2017-12-06 10:55:01

标签: python-3.x byte

来自python3文档的

表示“字节对象实际上表现得像整数的不可变序列,序列中的每个值都被限制为0< = x< 256(试图违反此限制将触发ValueError”是什么意思因为我尝试:

bytes(258)

仍然是结果字节对象:

b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

感谢

1 个答案:

答案 0 :(得分:2)

单字节确实是#34;限制"。我稍后会详细说明。 你做了什么,将值为零的258个单独字节放在一起。

一个字节由8位组成。想象一下每个位都像一个数字,但是十进制的整数,我们用二进制计算,因为每个数字只能有0或1的值。

所以我们有二进制的8位数,所以我们可以从00000000 to 11111111计算。

如果将其翻译为十进制,则恰好来自0 to 255

或者来自00 to ff的十六进制。

因此,您不能拥有值的字节> 255,因为否则你需要二进制9位数来计算。 它不仅仅是一些任意的边界,它实际上是一种物理限制。

编辑:回答你的评论。 您可以像这样编写单个字节:

bytes([210])

或类似的多个:

bytes([210, 55, 31, 55, 150])

并且超出限制确实会导致值错误:

bytes([270])
>ValueError: bytes must be in range(0, 256)

注意:256不在范围(0,256)