バイナリ形式のパーサーを書いています。このバイナリ形式には、さまざまなフィールドサイズ(通常は50〜100の範囲)を含むバイナリ形式のさまざまなテーブルが含まれます。
これらの構造のほとんどはビットフィールドを持ち、Cで表されると次のようになります。
struct myHeader
{
unsigned char fieldA : 3
unsigned char fieldB : 2;
unsigned char fieldC : 3;
unsigned short fieldD : 14;
unsigned char fieldE : 4
}
structモジュールに出くわしましたが、その最低解像度はビットではなくバイトであることに気付きました。それ以外の場合、モジュールはこの作業にほぼ適していました。
ビットフィールドがctypesを使用してサポートされていることは知っていますが、ここでビットフィールドを含むctypes構造体をインターフェースする方法がわかりません。
私の他のオプションは、ビットを自分で操作してバイトにフィードし、構造体モジュールで使用することです-しかし、そのような構造のタイプは50〜100に近いため、そのためのコードを書くとエラーが発生しやすくなります。このツールは大きなギガバイトのバイナリデータを解析するために使用される可能性があるため、効率についても心配しています。
ありがとう。