2016-04-03 96 views
0

說我有類似下面的ByteArray:
mask = bytearray([0b0001, 0b0100, 0b0111])
其中每一位代表一個特定的標記。我想一個標誌添加到遮罩陣列像這樣的片段:
mask[0:2] = mask[0:2] | 0b1000
但我得到一個類型錯誤:
TypeError: unsupported operand type(s) for |: 'bytearray' and 'int'
這將是這樣做的最優雅的方式?位掩碼操作的ByteArray

想這一點,還有:
masks[0:2] = bytearray([bin(m | 0b0001) for m in masks[0:2]]) 錯誤:
string must be of size 1

謝謝!

回答

2

不能直接做而不訴諸numpy,但你可以解決它:

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

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

讓你:

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

你接近你的最後一次嘗試,但在包裝bin轉換爲字符串表示形式,當你真的想要的原始整數值。

+0

謝謝 - 我甚至沒有考慮過numpy。我可以這樣做:'mask [0:2] = np.bitwise_or(mask [0:2],0b0001)'然後用'map(np.binary_repr,mask) – user5283407