使用 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'})
谢谢