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 :

Comment décoder un fichier binaire ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Par défaut Comment décoder un fichier binaire ?
    Bonjour,

    je dois lire un fichier binaire qui contient des blocs et récupérer les octets 9 à 16. Dans ces 8 octets figure la taille du fichier (qui peut donc être importante).
    Malheureusement je ne sais pas comment faire!

    Je peux bêtement lire les octets par fread et ensuite calculer la taille mais même en déclarant cette variable en long long int, j'ai le message d'erreur "attention : débordement d'entier dans l'expression"

    Mon code :

    taille=(int)c16+256*(int)c15+256*256*(int)c14+256*256*256*(int)c13+256*256*256*256*(int)c12+256*256*256*256*256*(int)c11+256*256*256*256*256*256*(int)c10+256*256*256*256*256*256*256*(int)c9;

    c9 représente l'octet 9, etc. jusqu'à c16.

    Je pense qu'il faut que je fasse un malloc parce que là je dois vous faire peur!

    Merci pour votre aide,

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    il faut connaitre le format de ton fichier, le plus efficace sera de passer par une (ou plusieurs) structure(s) et de fread la (ou les) structure(s) directement dans le fichier, préalablement ouvert avec l'attribut b pour binary

    hésite pas à fournir un code et/ou un morceau du fichier, son format etc. si besoin

  3. #3
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <fcntl.h>
     
    int handle;
    __int64 taille;
     
    handle = open ( "c:\\repertoire\\fichier" , O_RDONLY|O_BINARY );
    lseek ( handle , 9 , SEEK_SET );
    read ( handle , &taille , 8);
    close ( handle );
    Bonjour,

    voici un petit exemple
    l'entier "taille" est de type __int64 sinon tu ne pourra pas stocker 8 octets

    open : ouvre le fichier
    lseek se positionne su l'octet 9
    read lit 8 octets à partir de l'octet courrant (donc le 9ème : xe sont les octets de 9 à 16
    close ferme le fichier
    @+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Par défaut
    Mon compilateur (gcc) ne reconnaît pas le type __int64.
    Comment je peux faire?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 44
    Par défaut
    Je crois qu'il faut utiliser le type uint64_t en fait

  6. #6
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    Citation Envoyé par yoyostras Voir le message
    Mon compilateur (gcc) ne reconnaît pas le type __int64.
    Comment je peux faire?
    essaie :
    long long taille;

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 28
    Par défaut
    Bonjour à tous,

    tinofutinofu, si tu veux quelque chose de portable, il faudra passer par fopen : open est spécifique aux systèmes conformes POSIX (appel système) et sous Windows, un équivalent (avec des descripteurs) a été fait mais porte un nom légèrement différent... J'aurais aussi utilisé sizeof pour plus de clarté.

    EDIT : ça semble marcher avec le compilateur de Microsoft (pas de machine Windows sous la main pour l'instant) mais des warnings sont émis et il faut inclure io.h...

Discussions similaires

  1. Comment manipuler des fichiers binaires ?
    Par yrejk dans le forum C++
    Réponses: 1
    Dernier message: 15/04/2008, 19h40
  2. Réponses: 3
    Dernier message: 19/02/2007, 23h01
  3. Réponses: 2
    Dernier message: 20/11/2006, 18h37
  4. comment lire des fichiers binaires
    Par compton dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 06/07/2006, 12h03
  5. [Postgres]comment inserer des fichier binaires ?
    Par amin001 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/12/2005, 01h40

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