Pregunta

¿Se puede usar Spirit (parte de la biblioteca Boost C ++) para analizar datos binarios provenientes de una secuencia? Por ejemplo, ¿se puede usar para analizar datos provenientes de un socket en estructuras, bytes e indicadores de bits individuales? Gracias!

¿Fue útil?

Solución

Boost Spirit permite definir un analizador utilizando Formulario extendido Backus-Naur (EBNF) sintaxis con metaprogramación de plantillas . Es muy flexible y utiliza clases abstractas en todas las fases del proceso de análisis que se pueden personalizar. Para procesar una secuencia de datos binarios, deberá implementar clases de escáner personalizadas, ya que los tipos predeterminados están diseñados para la entrada de texto. Puede leer más en la sección El escáner y el análisis de la Guía del usuario de Spirit .

En mi humilde opinión, los flujos de datos binarios se manejan mejor con código de serialización enrollado a mano. El espíritu se orienta más hacia gramáticas bien formadas como los lenguajes de marcado o scripting. Por ejemplo, La sintaxis completa de Lua se proporciona en EBNF. Por lo tanto, podría tener sentido usar Spirit para crear un analizador personalizado. Por otro lado, un enlace de datos en serie patentado con bytes de sincronización y mensajes de bracketing CRC requeriría mucho más trabajo solo para definir el EBNF si un gramática libre de contexto incluso existe para ello.

Adddendum

El La última versión de Boost Spirit incluye funcionalidades para manejar datos binarios.

Otros consejos

Spirit2, recién lanzado, tiene facilidades para analizar binarios. Echa un vistazo a esto .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top