2016-04-03 9 views
0

Say Ich habe eine bytearray wie die folgenden:
mask = bytearray([0b0001, 0b0100, 0b0111]),
wobei jedes Bit eine bestimmte Flag darstellt. Ich möchte eine Flagge auf Scheiben des Maske Array hinzufügen wie folgt:
mask[0:2] = mask[0:2] | 0b1000
aber ich bekomme eine Typeerror:
TypeError: unsupported operand type(s) for |: 'bytearray' and 'int'
was wäre die eleganteste Art und Weise, dies zu tun?Bitmaske Operationen auf Scheiben Python ByteArrays

schon versucht, diese, wie auch:
masks[0:2] = bytearray([bin(m | 0b0001) for m in masks[0:2]]) mit Fehlern:
string must be of size 1

Dank!

Antwort

2

Kann nicht direkt ohne zu numpy greifen getan werden, aber man konnte es umgehen:

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

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

bekommt man:

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

Sie mit Ihrem letzten Versuch nahe waren, aber Einwickeln in bin wurde in eine Zeichenfolgendarstellung konvertiert, wenn Sie wirklich den ursprünglichen Ganzzahlwert haben wollten.

+0

Danke - ich habe nicht einmal an numpy gedacht. Ich kann etwas tun wie: 'masks [0: 2] = np.bitwise_or (Masken [0: 2], 0b0001)' und dann meine veränderten Flags mit 'map (np.binary_repr, masks) 'sehen – user5283407