バイナリ データの解析には、この素敵な小さなパッケージ「コンストラクト」を使用しています。ただし、フォーマットが次のように定義されている場合に遭遇しました。
31 24 23 0
+-------------------------+
| status | an int number |
+-------------------------+
基本的には上位8ビットをステータスに、残り3バイトを整数に、つまり上位ビットをマスクしたint型です。フォーマットを定義する適切な方法について少し迷っています:
- 強引な方法は、それを次のように定義し、
ULInt32
自分自身をビットマスキングすることです - 問題を解決するために BitStruct を使用できる方法はありますか?
編集
リトル エンディアンを想定し、jterrace の例と swapped=True の提案に基づいて、これが私の場合にうまくいくと思います。
sample = "\xff\x01\x01\x01"
c = BitStruct("foo", BitField("i", 24, swapped=True), BitField("status", 8))
c.parse(sample)
Container({'i': 66047, 'status': 1})
ありがとう
オリバー