Python字节数组切片上的位掩码操作

时间:2016-04-03 00:10:14

标签: python bytearray bitmask

假设我有一个如下所示的bytearray:
mask = bytearray([0b0001, 0b0100, 0b0111])
其中每个位代表某个标志。我想为掩码数组的切片添加一个标志,如下所示:
mask[0:2] = mask[0:2] | 0b1000
但我得到一个TypeError:
TypeError: unsupported operand type(s) for |: 'bytearray' and 'int'
这样做最优雅的方式是什么?

也试过这个:
masks[0:2] = bytearray([bin(m | 0b0001) for m in masks[0:2]]) 有错误:
string must be of size 1

谢谢!

1 个答案:

答案 0 :(得分:2)

无法在不诉诸numpy的情况下直接完成,但您可以解决这个问题:

mask[:2] = (b | 0b1000 for b in mask[:2])

print(list(map(bin, mask)))

得到你:

['0b1001', '0b1100', '0b111']

你最后的尝试已经接近了,但当你真的想要原始整数值时,bin中的包装正在转换为字符串表示。