Hi
Wie kann ich einfach nach 11 gesetzten Bits nacheinander suchen?
also Binär: 1111 1111 111x xxxx (für x 0 oder 1) insgesammt 2 Bytes.
Geht sowas mit regex? Wenn ja wie ist der Ansatz dazu?
Danke vielmals
Gruss
binär suchen (mit re?)
Reguläre Ausdrücke suchen nach Zeichen, also auf Bytes.
Kommen die 11 Bits so vor wie Du sie beschrieben hast, also ein Byte mit allen Bits gesetzt und im Nächsten dann die obersten 3 gesetzt, oder kann die Bitfolge auch noch innerhalb der Bytes verschoben sein?
Wenn sie nicht verschoben sind, dann kannst Du nach einem Byte mit dem Wert '\xFF' mit `str.find()` oder `str.index()` suchen und musst im nächsten Byte nur noch testen ob die obersten 3 Bits gesetzt sind. Entweder mit `&` die unteren ausmaskieren und testen ob die Maske übrig geblieben ist. Ungetestet:
Sollte die Bitfolge finden und die Position des ersten Bytes zurückgeben oder -1 falls die Bitfolge nicht enthalten ist.
Kommen die 11 Bits so vor wie Du sie beschrieben hast, also ein Byte mit allen Bits gesetzt und im Nächsten dann die obersten 3 gesetzt, oder kann die Bitfolge auch noch innerhalb der Bytes verschoben sein?
Wenn sie nicht verschoben sind, dann kannst Du nach einem Byte mit dem Wert '\xFF' mit `str.find()` oder `str.index()` suchen und musst im nächsten Byte nur noch testen ob die obersten 3 Bits gesetzt sind. Entweder mit `&` die unteren ausmaskieren und testen ob die Maske übrig geblieben ist. Ungetestet:
Code: Alles auswählen
def find_11_bits(data):
pos = data.find('\xFF')
if pos != -1:
if pos + 1 == len(data):
return -1
mask = int('11100000', 2)
tmp = ord(data[pos + 1]) & mask
if tmp != mask:
return -1
return pos
Wobei das schon geht:BlackJack hat geschrieben:Reguläre Ausdrücke suchen nach Zeichen, also auf Bytes.
Code: Alles auswählen
import re
data = "asdf\xff\xeeee\xff\xf9s"
res = re.findall(r"\xff[\xe0-\xff]",data)
for r in res:
print r[1] # Ausgabe des Zeichens hinterm \xff
Geht natürlich auch. Man muss aus Deinem Beispiel aber das 'r' vor dem Muster weglassen. Sonst haben die '\xff' und '\xe0' nicht die Bedeutung, die sie haben sollen. ;-)