Ich bin ziemlich neu in Haskell, und mein erstes Projekt ist es, erfasste WLAN-Pakete zu parsen. Ein übliches Muster bei der Analyse eines solchen Pakets besteht darin, dass ein Header-Feld die Struktur der verbleibenden Bytes definiert. Als allgemeines Beispiel kann ein Paket wie folgt formatiert sein:Monadische Analyse von Binärdaten in Haskell
header + [payload A | payload B | ..]
wo ein Flag-Feld (kann ein Bitmap) in dem Header angibt Welche Nutzlast (en) in dem Paket enthalten ist. Ein spezielles Beispiel für dieses Format finden Sie unter radiotap.
A similar thread schlägt vor, nur eine Folge von parse
Operationen wie folgt zu verwenden:
parseAll = do
hdr <- parseHeader
pa <- parsePayloadA
pb <- parsePayloadB
Allerdings scheint es nicht A
und B
in meinem Fall als die Existenz von Nutzlast angewendet werden, durch den Header definiert. Mit anderen Worten, der Kontrollfluss der Datenanalyse muss einem vorherigen Analyseergebnis folgen. Ich würde gerne verstehen, wenn es eine generische Möglichkeit gibt, binäre Daten mit dieser Art von Muster zu analysieren?
Danke. Was wäre die Art von "Nutzlast" in diesem Fall? – liu3tao
Vorausgesetzt, Sie haben zwei mögliche Payloads mit 'data Payload = PayloadA A | NutzlastB B' – Cactus