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
scroll top