Pergunta

Eu tenho um dispositivo externo que cuspa pacotes UDP de dados binários e software em execução em um sistema incorporado que precisa ler esse fluxo de dados, analisá -los e fazer algo útil. Os dados binários também são registrados em um arquivo. Gostaria de escrever um analisador que possa facilmente pegar a entrada diretamente do fluxo UDP ou um arquivo, analisar os dados em um formato específico e, em seguida, direcionar a saída para um arquivo (por exemplo, o arquivo matlab dat) ou para outro processo Isso fará algum processamento em tempo real. Existem recursos que me ajudariam com isso e qual é a melhor maneira de fazer isso? Eu acho que pode fazer sentido usar fluxos C ++, mas não estou familiarizado com a criação de fluxos de saída personalizados. Parece uma boa abordagem a seguir ou existe uma maneira melhor de fazer isso?

Obrigado.

Foi útil?

Solução

A beleza dos dados binários é que geralmente é de formato muito fixo. Um método típico de analisar é declarar uma estrutura que mapeia os pacotes recebidos e, em seguida, apenas usar o tipo de tipo para ler os campos como elementos da estrutura.

A beleza é que isso não requer análise.

Você deve ter cuidado com as regras de embalagem de estrutura e o Endian-Ness para fazer o mapa da estrutura exatamente da mesma maneira. O uso das macros C "OffsetOf" e "sizeof" é útil para emitir algumas informações de depuração para verificar se sua estrutura está realmente mapeando o que você acha que é mapeamento.

As regras de embalagem geralmente podem ser alteradas por diretivas (como #Pragma) ou opções de linha de comando. ENDIAN-NESS que você está preso. Se for diferente do que o seu sistema incorporado usa, declare todos os campos como bytes ou use algo como a macro "NTOH" para fazer a troca de bytes.

Outras dicas

O New Jersey Machine Code Toolkit é um esquema para decodificar padrões binários arbitrários. Foi originalmente projetado para decodificar conjuntos de instruções, mas deve ficar bem para decodificar formatos de mensagens. Você fornece uma descrição do formato binário, ele sintetiza o código para acessar os campos desse formato (quando válido). Assim, você pode se referir a campos de mensagem usando chamadas de função geradas, em vez de pensar em onde está o campo ou como ele é codificado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top