2009-08-31 14 views
2

J'ai un périphérique externe qui crache des paquets UDP de données binaires et de logiciels fonctionnant sur un système embarqué qui doit lire ce flux de données, l'analyser et faire quelque chose d'utile. Les données binaires sont également enregistrées dans un fichier. Je voudrais écrire un analyseur qui peut facilement prendre l'entrée directement du flux UDP, ou un fichier, analyser les données dans un format spécifique et ensuite diriger la sortie vers un fichier (par exemple matlab dat fichier) ou vers un autre processus cela fera un traitement en temps réel. Y a-t-il des ressources qui pourraient m'aider avec cela et quelle est la meilleure façon de s'y prendre? Je pense qu'il serait logique d'utiliser des flux C++, mais je ne suis pas familier avec la création de flux de sortie personnalisés. Est-ce que cela semble être une bonne approche ou y a-t-il une meilleure façon de s'y prendre?analyse de données binaires efficace et flexible

Merci.

Répondre

4

La beauté des données binaires est qu'elles sont généralement de format très fixe. Une méthode typique d'analyse consiste à déclarer une structure qui est mappée sur les paquets reçus, puis d'utiliser simplement les types-types pour lire les champs en tant qu'éléments de structure.

La beauté est que cela ne nécessite aucune analyse.

Vous devez faire attention aux règles d'empaquetage de structure et à l'endian-ness pour que la structure soit exactement la même. L'utilisation des macros C "offsetof" et "sizeof" est utile pour émettre des informations de débogage afin de vérifier que votre structure correspond bien à ce que vous pensez qu'elle est en train de cartographier.

Les règles d'emballage peuvent généralement être modifiées soit par des directives (telles que # pragma), soit par des options de ligne de commande. Endian-vous êtes coincé avec. Si c'est différent de ce que votre système embarqué utilise, déclarez tous les champs comme des octets, ou utilisez quelque chose comme la macro "ntoh" pour faire l'échange d'octets.

+0

merci pour la réponse. J'ai examiné en utilisant des moulages de bande pour faire la partie d'analyse et j'aime cela. Je suis toujours à gauche avec l'entrée/sortie réelle ... Je voudrais obtenir les données soit des paquets UDP en temps réel, ou à partir d'un fichier de données enregistrées, puis écrire les données analysées dans un autre fichier, ou faire il est accessible à une autre classe ou un autre processus. – HazyBlueDot

0

The New Jersey Machine Code Toolkit est un schéma de décodage de motifs binaires arbitraires. Il a été conçu à l'origine pour décoder les jeux d'instructions, mais il devrait être très bien pour décoder les formats de message. Vous fournissez une description du format binaire, il synthétise le code pour accéder aux champs de ce format (si valide). Par exemple, vous pouvez vous référer aux champs de message en utilisant les appels de fonction générés plutôt que de penser à l'endroit où se trouve le champ ou comment il est codé.