Я хотел бы побайтно сканировать файлы данных с GPS-приемника (на самом деле это будет непрерывный поток, не хочу тестировать код с автономными данными). Если найдено совпадение, то проверьте следующие 2 байта на «длину», получите следующие 2 байта и сдвиньте 2 бита (не байт) вправо, et c. Раньше я не работал с двоичными файлами, поэтому застрял на простой задаче. Я мог читать двоичный файл побайтно, но не могу найти способ сопоставления по желаемому шаблону (например, D3).
with open("COM6_200417.ubx", "rb") as f:
byte = f.read(1) # read 1-byte at a time
while byte != b"":
# Do stuff with byte.
byte = f.read(1)
print(byte)
Выходной файл:
b'\x82'
b'\xc2'
b'\xe3'
b'\xb8'
b'\xe0'
b'\x00'
b'@'
b'\x13'
b'\x05'
b'!'
b'\xd3'
b'\x00'
b'\x13'
.... как проверить, является ли этот байт == '\ xd3'? (D3) также хотел бы знать, как выполнить побитовый сдвиг, поскольку мне нужно проверить десятичное значение, состоящее из 6 бит (1-байт и первые 2 бита следующего байта). Принимая во внимание 2 байта (8 бит), а затем 2-битный сдвиг вправо, чтобы получить 6 бит. Возможно ли в python? Приветствуются любые улучшения / дополнения / изменения.
ps. Могу я избавиться от надоедливой буквы «b» спереди? но если игнорирование не повлияет, то никаких проблем.
Заранее спасибо.