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 :

Parser fichier binaire


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut Parser fichier binaire
    Bonjour,

    Je voudrais extraire les donnée d'un fichier binaire et les stocker dans des variables.

    Les premiers bits du fichiers sont des caracteres, je les extraits grace a cette fonction :

    (FileIO est un fstream)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void FileIO::readMachineEndian(char& aNumber) {
       this->read(&aNumber, sizeof(aNumber));
    }
    Jusqu'ici ça marche. Mais je voudrais convertir les blocs de bit suivant directement en un long, et non en caractere, j'utilise donc la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void FileIO::readMachineEndian(long& aNumber) {
       this->read((char*)&aNumber, sizeof(aNumber));
    }
    Le flux de 4 bloc est en exa 00 00 00 06.
    Je devrais onc obtenir la valeur 6 dans aNumber.
    Or la valeur obtenue est 100663296...

    Pourquoi cette incohérence ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Parce l'endianess de ton système fait que l'octet de poids fort est à la fin (me rappelle jamais si c'est du little endian ou du big endian). Donc en fait ton 00 00 00 06 est interprété par le processeur comme un 06 00 00 00, ce qui fait bien 100663296.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pour me prévenir de ce genre de surprises, j'évite absolument ce genre d'écritures pour lire du binaire. Je le lis byte par byte, puis je le recompose selon la spec du format de fichier, sans me préoccuper de l'endianness de ma machine.

    Un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    long value = 0;
    value = value<<8 + byte1;
    value = value<<8 + byte2;
    value = value<<8 + byte3;
    value = value<<8 + byte4;
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Ok, ca marche beaucoup mieux en effet.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parser un fichier binaire à extension spéciale
    Par VulpesZerda dans le forum WebGL
    Réponses: 10
    Dernier message: 26/08/2014, 09h37
  2. Parser un fichier binaire
    Par Gui310 dans le forum Général Python
    Réponses: 0
    Dernier message: 25/07/2013, 11h20
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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