С библиотекой Python construct данные, которые я анализирую, имеют поле, которое имеет значение, только если установлен флаг.
Однако поле данных всегда присутствует.
Поэтому я хотел бы использовать данные в любом случае, но установить значение поля только на основе значения флага.
Например, если структура (неправильно) определена как:
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'})
Спасибо