séquence de longueur variable, premier bit indiquant la fin de la séquence, preon
-
12-11-2019 - |
Question
Comment analyseriez-vous une séquence de longueurs variables d'octets où le premier bit (bigendian) indique si un autre octet suit en utilisant preon?
Exemple
byte[] bytecode = new byte[] {
(byte) 0xf2, (byte) 0xbf, (byte) 0xbf, (byte) 0xbf, (byte) 0x50
};
Remarques
- Premier bit qui indique que le suivant est rejeté en charge utile finale
- La version de Preon utilisée pour ce post était 1.1
Résultat octets (en décimal)
{ 114, 63, 63, 63, 80 }
Déjà essayé
@BoundList + @Choices (avec conditions)
LIMBO EXP LANG ne prend pas en charge les appels de méthode, vous ne pouvez donc pas détecter la fin du flux (les besoins précédents ont le signe 1 et le bloc actuel doit être le dernier, c'est-à-dire que le signe doit être 0)
Approche récursive avec @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);
}
//...
}
Pour une raison quelconque, par exemple mentionné ci-dessus, Preon n'analysera que 2 instances d'entrée (parent et enfant) même lorsqu'il devrait y en avoir 3.
Merci.
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow