を消費し、私はパースだデータは、フラグが設定されている場合にのみ意味を持つフィールドがあります。Pythonは構築 - Pythonの<a href="http://construct.wikispaces.com/" rel="nofollow">construct</a>ライブラリで任意のフィールドのデータ
ただし、データフィールドは常に存在します。
したがって、私はどのような場合でも、データを消費するが、唯一のフラグの値に基づいて、フィールドの値を設定したいと思います。例えば
、構造が(誤って)として定義されている場合:
データについて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})
Iは、以下を試してみました:
struct = Struct("struct",
Flag("flag"),
IfThenElse("optional_data", lambda ctx: ctx.flag,
UBInt8("dummy"),
Padding(1)
),
UBInt8("mandatory")
)
しかし、パディング()はそうように、フィールド内の生データを置く:
>>> struct.parse("000203".decode("hex"))
Container({'flag': False, 'mandatory': 3, 'optional_data': '\x02'})
を
ありがとうございました