Sto cercando di ottenere Kaitai Struct per decodificare una struttura binaria. I campi seq
funzionano come previsto, ma il instances
non sembra funzionare come voglio.Stringa Kaitai: istanze calcolate con una condizione
mio formato binario include un'intestazione con un elenco di costanti che mi parse come header
campo con consts
serie sottocampo:
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
Tuttavia, quando cerco di usare la seguente dichiarazione:
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
Questo ha lo scopo di calcolare un valore di index_const
esaminando la matrice di header.consts
se e solo se idx
è nell'intervallo [0x40..0x4f].
io uso Python come la mia lingua di destinazione e presumo che dovrebbe generare un codice come:
@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
Tuttavia, ciò che ottengo è:
@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
Sono solo io, sono io manca qualcosa di ovvio, o è un bug in Kaitai Struct?
Grazie! È un peccato che sia un bug :(Qualche idea su soluzioni alternative o quanto dovrei aspettare per una correzione di bug? –
La soluzione più semplice sarebbe quella di incorporare qualsiasi cosa tu abbia in "if" nel punto in cui vuoi accedere a "index_const". a. In generale è ok farlo nel codice reale, ma può essere alquanto complicato per il linguaggio di espressioni interne di KS. Proverò a tenerti aggiornato. – GreyCat