IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

afficher structures de fichiers binaires


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut afficher structures de fichiers binaires
    Bonjour,

    Je suis entrain de me mettre progressivement au C++, et j'aimerais parcourir un fichier binaire et afficher toutes le structures.
    Faut il connaitre la constitution des structures à l'avance?
    Je voudrais savoir s'il existe un exemple pour ça.

    Merci.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Salut,

    Par principe, tu dois connaitre la structure d'un fichier binaire pour pourvoir le comprendre et le parser.

    Tu as plusieurs cas :
    a) soit il s'agit d'un fichier répondant à certains standards (dll, jpg, etc.)
    b) soit il s'agit d'un fichier que quelqu'un a fait dans son coin

    Si a), réfère toi à la documentation appropriée.
    Il se peut même que des outils de parsage existent déjà, et te prémâchent le travail (ça sert à rien de réinventer la roue..)

    Si b), il faut demander gentiment à la personne qui a déterminé cette structure.

    Tu es dans quel cas ?
    Es-tu sûr qu'il s'agit de fichier binaires (si tu l'ouvres avec un éditeur de texte, qu'est-ce qu'il t'affiche ? ) ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Merci d'avoir répondu etienne.

    J'ai obtenu les structures de ce fichier binaire. En fait il ya deux type de structures. Des paquets et des Messages.
    Dans la structure des Paquets il ya un attribut qui s'appelle "NbMsg" qui determine le nombre de Messages dans ce paquet.
    Donc dois je déclarer deux structures un pour les paquets et un pour les messages? En ce qui concerne l'affichage de chaque attribut des structures comment faire?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par peemoney Voir le message
    Merci d'avoir répondu etienne.
    De rien, de rien

    Citation Envoyé par peemoney Voir le message
    J'ai obtenu les structures de ce fichier binaire. En fait il ya deux type de structures. Des paquets et des Messages.
    Dans la structure des Paquets il ya un attribut qui s'appelle "NbMsg" qui determine le nombre de Messages dans ce paquet.
    Donc dois je déclarer deux structures un pour les paquets et un pour les messages? En ce qui concerne l'affichage de chaque attribut des structures comment faire?
    Je ne suis pas vraiment magicien. Il va me falloir beaucoup plus d'information que ça si tu veux que je t'aide précisément.
    Peux tu nous transmettre la structure de tes fichiers ?

    En général, un fichier possède un en-tête qui défini son contenu. Et qui te permet de le parser.

    A priori, je dirai d'un point de vue méthodo que tu as trois aspects importants :
    - la lecture de l'info
    - classe contenat l'info
    - l'affichage de l'info

    Fais un petit peu attention à ne pas mélanger tout ça. Ce ne serait pas joli/pratique.

    Pour la lecture de l'info, il te faut les clés de compréhension du fichier..

    Le plus important, d'un point de vue conception, c'est ta classe qui contiendra l'info. il faut savoir comment tu vas l'organiser. Attributs, types, etc.

    Une fois que tu auras fais ça, tu pourras te faire une méthode affiche, ou un truc comme ça, qui affichera en console le contenu du fichier. tu pourras faire différents niveaux de Verbose si tu veux, ce genre de choses.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Je peux définir les structures comme suit:

    struct Packet
    {
    int longueur;
    int type;
    int seq;
    int heure;
    int serv;
    int flog;
    int nbMessage;
    };


    struct Message
    {
    int taille;
    int type;
    int nbAccor;
    int max;
    int min;
    };

    Si Packet->nbMessage=3 par exemple, on aura 3 Messages avant de passer au packet d'après.
    Donc quand tu parles d'entête je pense que tu parles du PacketHeader qui est structuré comme le struct Packet je pense..
    Pour l'affichage ca pourra venir après, mais dans un premier temps je cherche à parcourir le fichier binaire et pouvoir utiliser par exemple l'attribut nbAccor de Message..
    N'hesites pas si tu as d'autres questions.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Es-tu sûr qu'il s'agit de fichiers binaires ?

    Je demande ça, parce que les problèmes auxquels on s’attend dans ce genre de cas ont à voir avec l'endianess, la gestion de bloc, etc. Des histoire d'hexadécimal et tout et tout.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Oui c'est du binaire.
    Justement c'est le but car j'avais une première solution qui était de le convertir en fichier texte (avec un outil existant) puis de le parser ligne par ligne afin de récupérer les infos qui m’intéressent.
    Cette solution marche très bien mais point de vue perfs ce n'est pas le top.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Donc, on va dire si je résume bien :

    Aspect technique, t'es ok. Tu sais lire les infos que tu veux, etc. ?

    Aspect stratégique :
    - Lis d'abord tes paquets, récupère tes infos, structure, etc. Tu fais une collection de paquets de messages (juste les méta infos, sans lire le message)
    - Fais une méthode qui te lis un message
    - Ensuite tu parcours tes paquets, lis les messages qui vont avec, et les connecte au bon endroit.

    Je suis pas de savoir ou se situe ta question. Est-ce que tu peux être beaucoup beaucoup plus précis sur les difficultés que tu rencontres, la ou tu bloques, ce que tu as commencé à faire ?
    La tu demandes que l'on fasse à ta place quelques chose sur une tâche sur laquelle on n'a pas vraiment d'infos.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Alors,

    Dans la solution que j'avais fait je pouvais lire les informations facilement vu que le fichier a été converti en fichier texte donc pas compliqué de le parser.

    Ce que je veux faire c'est ne pas decoder le fichier binaire dans un premier temps, aller directement dans le fichier binaire et taper dans les structures, recupérer les infos que je veux, les storer dans un file pour ensuite le traiter.

    Alors ma question c'est comment lire un fichier binaire structuré et le parser en c++, après avoir défini mes structures plus haut dans la discussion..

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 23
    Points : 24
    Points
    24

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    pour ton cas, une solution idéale : reinterpret_cast !
    Et manipuler du pointeur.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup Etienne

Discussions similaires

  1. Réponses: 23
    Dernier message: 13/02/2009, 12h31
  2. Réponses: 9
    Dernier message: 04/06/2007, 21h44
  3. Réponses: 5
    Dernier message: 26/03/2007, 01h30
  4. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo