Этот код работает (но он громоздок в использовании и требует ручного переключения на правильное поле объединения ):
Код: Выделить всё
SC_Header = Int32ul
SC_Object = Int32ul
SC_String = BitStruct (
"latin1" / Flag,
"buffer" / Flag,
"length" / BitsInteger(30)
)
SC_Pair = Struct (
"value" / Union(0,
"header" / SC_Header,
"object" / SC_Object,
"string" / SC_String,
),
"tag" / Int32ul,
)
Код: Выделить всё
SC_Header = Int32ul
SC_Object = Int32ul
SC_String = BitStruct (
"latin1" / Flag,
"buffer" / Flag,
"length" / BitsInteger(30)
)
SC_Pair = Struct (
"value" / Switch(lambda ctx: ctx.tag, {
0xFFF10000: SC_Header,
0xFFFF0008: SC_Object,
0xFFFF0004: SC_String,
}),
"tag" / Int32ul,
)
Как мне указать поле, чтобы добиться этого?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ds-on-a-lo
Мобильная версия