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
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
.
所以你的最后一行应该是:
data[0] = ~ data[0] & 0xFF