bytearray的二进制反转值

时间:2016-01-08 14:08:46

标签: python operators

我想反转(翻转位;二进制不)所有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)

2 个答案:

答案 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')