2016-04-03 84 views
0

aşağıdaki gibi ByteArray var ki bytearrays:
mask = bytearray([0b0001, 0b0100, 0b0111]), her bit belli bayrağı temsil
. Öyle gibi maske dizinin dilimleri için bir bayrak eklemek istiyorum:
mask[0:2] = mask[0:2] | 0b1000
ama TypeError olsun:
TypeError: unsupported operand type(s) for |: 'bytearray' and 'int'
neyi Bunu yapmanın en zarif yolu ne olurdu?bit maskesi işlemleri

yanı, bu çalıştı:
masks[0:2] = bytearray([bin(m | 0b0001) for m in masks[0:2]]) hata ile:
string must be of size 1

teşekkürler!

cevap

2

numpy başvurmadan doğrudan Yapılamaz, ancak bunun geçici bir çözüm olabilir:

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

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

sen alır:

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

Sonuç olarak oluşacak girişimi ile yakın, ama içinde sarma Orijinal tamsayı değerini gerçekten istediğinizde bin bir dize temsiline dönüştürüyordu.

+0

Teşekkürler - Numpy hakkında düşünmedim bile. Şunun gibi bir şey yapabilirim: 'maskeler [0: 2] = np.bitwise_or (maskeler [0: 2], 0b0001)' ve sonra değiştirilmiş bayraklarımı harita ile gör (np.binary_repr, maskeler) ' – user5283407