Ich versuche, Kaitai Struct zu bekommen, um eine binäre Struktur zurückzuentwickeln. seq
Felder funktionieren wie vorgesehen, aber instances
scheinen nicht so zu funktionieren, wie ich es möchte.Kaitai Struct: berechnete Instanzen mit einer Bedingung
Mein Binärformat enthält einen Header mit einer Liste von Konstanten, die ich mit consts
Array-Unterfeld als header
Feld analysieren:
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
aber wenn ich versuche, die folgende Erklärung zu verwenden:
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
Dieser Wert soll einen Wert von index_const
berechnen, indem in das Array header.consts
genau dann nachgesehen wird, wenn idx
im Bereich [0x40..0x4f] liegt.
ich Python als meine Zielsprache verwenden, und ich nehme an, dass es einen Code wie generieren soll:
@property
def index_const(self):
if hasattr(self, '_m_index_const'):
return self._m_index_const
if self.idx >= 64 and self.idx <= 79:
self._m_index_const = self._root.header.consts[(self.idx - 64)];
return self._m_index_const
Doch was ich bekommen ist:
@property
def index_const(self):
if hasattr(self, '_m_index_const'):
return self._m_index_const
self._m_index_const = self._root.header.consts[(self.idx - 64)];
return self._m_index_const
Ist es nur mich, ich bin etwas offensichtliches fehlt, oder ist es ein Fehler in Kaitai Struct?
Danke! Es ist schade, dass es ein Bug ist :(Irgendwelche Ideen zu Workarounds oder wie viel sollte ich auf einen Bugfix warten? –
Die einfachste Problemumgehung wäre, nur was Sie haben in "if" an der Stelle, die Sie auf Ihre "index_const" zugreifen möchten Es ist im Allgemeinen in Ordnung, dies in echtem Code zu tun, aber es kann etwas schwierig für die interne Ausdrucksweise von KS sein. Ich werde versuchen, Sie auf dem Laufenden zu halten. – GreyCat