bytearray 的二进制反转值

binary invert values of 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)

您可以使用全 1 的位掩码对每个值进行 XOR:

data[index] ^= 0b11111111

或者:

data[index] ^= 0xFF

您需要屏蔽掉 Python 在进行按位反转时创建的 higher-order/sign 位(例如,在 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')