Sequenza di lunghezza variabile, primo bit che indica l'estremità della sequenza, Preon

StackOverflow https://stackoverflow.com/questions/4961754

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