2008-11-12 11 views
8

È possibile utilizzare Can Spirit (parte della libreria Boost C++) 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 di bit? Grazie!È possibile utilizzare Boost Spirit per analizzare i dati del flusso di byte?

+1

puoi fornire maggiori dettagli sul formato dei dati. È un formato complesso? –

+0

Non ricordo quello che avevo in mente quando lo chiesi in origine, ma probabilmente aveva a che fare con il riconoscimento degli header SSL/TLS. – Brian

risposta

12

Boost Spirit consente di definire un parser utilizzando la sintassi Extended Backus–Naur Form (EBNF) con template meta-programming. È molto flessibile e utilizza classi astratte in tutte le fasi del processo di analisi che possono essere personalizzate. Per elaborare un flusso di dati binario, è necessario implementare classi di scanner personalizzate poiché i tipi predefiniti sono personalizzati per l'immissione di testo. Puoi leggere ulteriori informazioni nella sezione The Scanner and Parsing di Spirit User's Guide.

A mio modesto parere, i flussi di dati binari vengono gestiti al meglio con codice di serializzazione arrotolato a mano. Lo spirito è orientato più verso grammatiche ben formate come il mark-up o linguaggi di scripting. Ad esempio, The Complete Syntax of Lua viene fornito in EBNF. Quindi, potrebbe essere sensato usare Spirit per creare un parser personalizzato. D'altra parte, un collegamento di dati seriale proprietario con i byte di sincronizzazione e i messaggi di bracketing CRC richiederebbe molto più lavoro solo per definire l'EBNF se esiste anche uno context-free grammar.

Addendum

The latest version of Boost Spirit includes functionality for dealing with binary data.

9

Spirit2, appena uscito, dispone di strutture per l'analisi binario. Check out this.

+0

Molto bello, grazie! – Brian