Python3 字节级位操作

Python3 Byte Level Bit Operations

Python3有字节类型吗?我只知道有一个bytearray。

我想要的是,有一个字节0x01,然后做补码运算符~结果会是0xFE,但是当我做下面的步骤时,结果是 -2 并且 -2 无法添加到 bytearray。

>>> data=bytearray([0x01])
>>> data
bytearray(b'\x01')
>>> ~data[0]
-2
>>> data[0]=~data[0]
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)

您可以对 256 取模 ~data[0] 以获得正确移位的值:

>>> data = bytearray([0x01])
>>> data[0] = ~data[0]%256
>>> data
bytearray(b'\xfe')

有关对负数进行模运算的详细信息,请参阅negative numbers modulo in python

Python 3 有两种处理字节的类型:bytes 类型,它是不可变的(类似于 str),而 bytearray 是可变的。如果需要将整数转换为字节,只需使用 & 0xFF.

取低 8 位

所以你的最后一行应该是:

data[0] = ~ data[0] & 0xFF