Python - элегантный способ работы с двоичными данными, не кратными 2 - PullRequest
0 голосов
/ 19 октября 2019

Я работаю с двоичными данными, которые хранятся в байтовом массиве, и мне нужно получить доступ к битам произвольной длины внутри этого массива. Производительность также является проблемой. Позвольте мне привести краткий пример:

# 11111111 | 11101111 | 01111100
byte_arr = bytearray([255, 239, 124])

# A corresponds to the first 6 bits, e.g. index 0-5
a = byte_arr[0]>>2 

# B corresponds to the next 2 bits, e.g. index 6-7
b = byte_arr[0] & 0x3

# C corresponds to the next 9 bits, e.g. index 8-16
c = int.from_bytes(byte_arr[1::], byteorder="big", signed=False)>>7

Мое вышеупомянутое решение работает, но типичный байтовый массив имеет 20 байтов, и поэтому код становится нечитаемым и на первый взгляд определенно не интуитивно понятным.

Модули, подобные struct, не помогут, потому что они ТОЛЬКО могут распаковывать байты, например, 2 ^ X

...