Я использую этот симпатичный маленький пакет " construct " для анализа двоичных данных. Тем не менее, я столкнулся со случаем, когда формат определяется как:
31 24 23 0
+-------------------------+
| status | an int number |
+-------------------------+
Как правило, старшие 8 бит используются для статуса, а 3 байта оставляются для целого числа: тип int с маскированными старшими битами. Я немного растерялся из-за правильного определения формата:
- Способ грубой силы состоит в том, чтобы определить его как
ULInt32
и маскировать себя
- Можно ли в любом случае использовать BitStruct для решения проблемы?
Редактировать
Предполагая Little Endian и основываясь на примере jterrace и меняя местами = Истинное предложение, я думаю, что это будет работать в моем случае:
sample = "\xff\x01\x01\x01"
c = BitStruct("foo", BitField("i", 24, swapped=True), BitField("status", 8))
c.parse(sample)
Container({'i': 66047, 'status': 1})
Спасибо
Оливер