Domanda

Spirit (parte della libreria Boost C ++) può essere utilizzato per analizzare i dati binari provenienti da un flusso? Ad esempio, può essere utilizzato per analizzare i dati provenienti da un socket in strutture, byte e singoli bit flag? Grazie!

È stato utile?

Soluzione

Boost Spirit consente di definire un parser usando Extended Backus & # 8211; Naur Form (EBNF) sintassi con meta-programmazione di modelli . È molto flessibile e utilizza classi astratte in tutte le fasi del processo di analisi che possono essere personalizzate. Per elaborare un flusso di dati binari, è necessario implementare classi di scanner personalizzate poiché i tipi predefiniti sono personalizzati per l'immissione di testo. Puoi leggere più avanti nella La sezione Scanner and Parsing della Guida dell'utente Spirit .

A mio modesto parere, i flussi di dati binari sono gestiti al meglio con il codice di serializzazione arrotolato a mano. Lo spirito è più orientato verso grammatiche ben formate come linguaggi di mark-up o di scripting. Ad esempio, La sintassi completa di Lua è fornita in EBNF. Quindi, potrebbe avere senso usare Spirit per costruire un parser personalizzato. D'altra parte, un collegamento dati seriale proprietario con byte di sincronizzazione e messaggi di bracketing CRC richiederebbe molto più lavoro solo per definire l'EBNF se un grammatica senza contesto esiste persino per questo.

Addendum

The l'ultima versione di Boost Spirit include funzionalità per la gestione dei dati binari.

Altri suggerimenti

Spirit2, appena rilasciato, ha funzionalità per l'analisi binaria. Dai un'occhiata a .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top