Sequenza di lunghezza variabile, primo bit che indica l'estremità della sequenza, Preon
-
12-11-2019 - |
Domanda
Come analizzeresti una sequenza di lunghezza variabile di byte in cui il primo bit (bigendian) indica se un altro byte sta seguendo usando Preon?
Esempio
byte[] bytecode = new byte[] {
(byte) 0xf2, (byte) 0xbf, (byte) 0xbf, (byte) 0xbf, (byte) 0x50
};
Appunti
- Primo bit che indica che il prossimo viene scartato nel payload finale
- La versione di Preon utilizzata per questo post era 1.1
Byte di risultato (in decimale)
{ 114, 63, 63, 63, 80 }
Già provato
@BoundList + @Choices (con condizioni)
Limbo Exp Lang non supporta le chiamate del metodo, quindi non è possibile rilevare la fine del flusso (le precedenti devono avere il segno 1 e il blocco corrente deve essere l'ultimo, IE il segno deve essere 0)
Approccio ricorsivo con @if
public static class Entry {
@BoundNumber(size = "1", byteOrder = ByteOrder.BigEndian)
private byte hasNext;
@BoundNumber(size = "7", byteOrder = ByteOrder.BigEndian)
private byte payload;
@If("hasNext > 0")
@BoundNumber(size = "1", byteOrder = ByteOrder.BigEndian)
private byte hasNext1;
@If("hasNext > 0")
@BoundNumber(size = "7", byteOrder = ByteOrder.BigEndian)
private byte payload1;
@If("hasNext1 > 0")
@BoundObject
private Entry nextEntry;
@Override
public String toString() {
return hasNext > 0 ? String.valueOf(payload) : String.valueOf(payload)
+ ", " + String.valueOf(payload1);
}
//...
}
Per qualche motivo, ad esempio sopra menzionato, Preon analizzerà solo 2 istanze di voce (genitore e figlio) anche quando dovrebbero esserci 3.
Grazie.
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow