Pythonコンストラクトライブラリを使用すると、解析しているデータには、フラグが設定されている場合にのみ意味を持つフィールドがあります。
ただし、データ フィールドは常に存在します。
したがって、どのような場合でもデータを使用したいと思いますが、フラグの値に基づいてフィールド値を設定するだけです。
たとえば、構造体が (誤って) 次のように定義されている場合:
struct = Struct("struct",
Flag("flag"),
UBInt8("optional_data"),
UBInt8("mandatory")
)
データについて:
>>> struct.parse("010203".decode("hex"))
結果は次のようになります。
Container({'flag': True, 'mandatory': 3, 'optional_data': 2})
データの場合:
>>> struct.parse("000203".decode("hex"))
望ましい結果は次のとおりです。
Container({'flag': False, 'mandatory': 3, 'optional_data': None})
私は次のことを試しました:
struct = Struct("struct",
Flag("flag"),
IfThenElse("optional_data", lambda ctx: ctx.flag,
UBInt8("dummy"),
Padding(1)
),
UBInt8("mandatory")
)
ただし、 Padding() は次のように生データをフィールドに入れます。
>>> struct.parse("000203".decode("hex"))
Container({'flag': False, 'mandatory': 3, 'optional_data': '\x02'})
ありがとうございました