我想反转(翻转位;二进制不)所有bytearray的值。我试过这个:
for index in xrange(len(data)):
data[index] = ~data[index]
这失败了因为p.ex. 0得-1,然后:
Traceback (most recent call last):
...
data[index] = ~data[index]
ValueError: byte must be in range(0, 256)
答案 0 :(得分:4)
您可以使用所有值的位掩码对每个值进行异或运算:
data[index] ^= 0b11111111
可替换地:
data[index] ^= 0xFF
答案 1 :(得分:1)
当你进行按位反转时,你需要屏蔽Python创建的高阶/符号位(例如,在Python中,~0xff
是-256,而不是C程序员所期望的零。)
>>> b = bytearray((0x00, 0x55, 0xAA, 0xFF))
>>> b
bytearray(b'\x00U\xaa\xff')
>>> for i, v in enumerate(b):
... b[i] = 0xFF & ~v
...
>>> b
bytearray(b'\xff\xaaU\x00')