URL: https://linuxfr.org/forums/programmation-c--2/posts/manipulation-rapide-et-l%C3%A9g%C3%A8re-de-donn%C3%A9es-structur%C3%A9es-binaires Title: Manipulation rapide et légère de données structurées binaires Authors: David Decotigny Date: 2009年04月29日T17:49:48+02:00 Tags: Score: 1 Cher journal, imaginons que j'ai un programme qui doivent exploiter des données binaires structurées. Genre des paquets avec un header structuré, des données arbitraires de taille variable spécifiée dans le header, et un footer structuré. Structures connues et tout. Imaginons que je veuille accéder (lecture/écriture) aux différents champs contenus dans les différentes structures. "Facile" qu'on peut répondre : il suffit de définir les struct { }; qui vont bien en C et le compilateur fait le reste... Certes, mais ce n'est pas suffisant. Car il faut compter sur les indiens, qui ne sont pas gentils quand les champs font plus de 8 bits de large. Bref, en pratique on se retrouve avec un programme tout beau tout simple mais qui interprète les indiens de travers. Existe-t'il un "__attribute__" gcc qui permet de spécifier l'endianness d'une structure ? Ou un système qui génère du code C ou C++ permettant d'accéder aux champs des structures (décrites elles-mêmes sous forme de struct C ou dans un langage spécifique) en prenant soin de s'occuper de l'endianness ? En ce qui me concerne, la limitation principale n'est pas vraiment cette histoire d'indiens sur des mots simples (ntoh*/hton*, après tout ce n'est pas la mer à boire). C'est surtout que j'ai des mots qui contiennent des champs de bits, et ça c'est un peu casse-pied puisqu'il faut "cuisiner" et c'est pas très joli. Pour l'instant, j'ai choisi le générateur de code [http://morcandel.free.fr/mimine](http://morcandel.free.fr/mimine) pour le C. Mais cela ne satisfait qu'à moitié mes exigences de flemmardise. J'ai aussi eu vent de NetPDL ([http://www.nbee.org/doku.php?id=netpdl:index)](http://www.nbee.org/doku.php?id=netpdl:index)) mais est-ce bien utilisable en mode génération de code ? J'avais aussi un peu suivi DEVIL ([http://phoenix.labri.fr/software/devil/)](http://phoenix.labri.fr/software/devil/)) mais je ne suis pas convaincu que ça corresponde à ce qui m'intéresse, ni que ce soit encore très actif. J'ai aussi vu [http://nmedit.sourceforge.net/subprojects/libpdl.html](http://nmedit.sourceforge.net/subprojects/libpdl.html) mais j'ai cru comprendre que l'overhead CPU pouvait être important (utilisation de dictionnaires pour caser les champs, parsing en-ligne de la description, etc.). Des idées pour éclairer ma lanterne ? Comment font les gens de wireshark ?

AltStyle によって変換されたページ (->オリジナル) /