Python中有一段代码:
>>> bt2 = bytearray(2)
>>> bt2[0] -= 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)
>>> bt2[1] -= 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)
这对我来说是意想不到的行为。由于我有使用 x86-64 架构的汇编语言进行开发的经验,因此我希望当我将等于 0x0 的字节减 1 时,我将得到值 0xFF。如果我将等于 0xFF 的字节加 1,我将得到 0x0。但相反,我看到的是被遗弃的ValueError。
我有两个问题:
- 是否
Python可以模拟“字节”,即减0x0时得到0xFF? - 为什么
Python会有这样的行为?
您可以使用
numpy作为一个选项:
明确限制字节值有助于避免低级语言中可能发生的溢出错误和意外行为。