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 :

Endianess et lecture fichier binaire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Par défaut Endianess et lecture fichier binaire
    Bonjour,

    Je dois réaliser un programme qui lit un fichier binaire (qui peut avoir été écrit par nimporte quelle autre machine). Seulement je sais juste que mon fichier contient un int suivie d'un double et ensuite un uint (j'ai simplifié).

    Par exemple,

    -une machine A peut écrire ce fichier binaire avec un little endian
    8 octets pour int, 8 octets pour double et 8 octets pour l'uint
    Ca fait que le fichier binaire bin.dat a une taille de 24 octets

    -une autre machine B doit lire ce fichier bin.dat or cette machine est en big-endian et code les int sous 4 octets, les doubles sous 8 octets et les uint sous 4 octets. Dans ce cas la la machine B ne lira pas les données correctement.


    Donc ma question est comment faire pour que B détecte que A a codé l'int sous 8 octets et comment faire pour sauver cet entier sous 8 octets sous B?

    Au niveau de l'endianess je sais qu'il faut se fixé une règle pour dire que le fichier doit être ecrit en BIG endian par exemple et ainsi le lecteur sait qu'il doit inverser les octet si il est en little endian.

    Mais mon vri problème est au niveau de la taille des données comment les gérer ?

    Merci

    Algernon

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Par défaut PB endianess lecture fichier binaire C
    Une autre question, est-ce que il est préférable de passer en C#, car je crois que C# gère cela tout seul non?

    J'ai lus dans un cours que seul les ints ne sont pas portables, mais je pense que les double et les floats ne le sont pas non plus car leur taille peuvent différés d'une machine à une autre, est-ce vrai?


    Merci pour vos réponses

    Algernon

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    pas de magie à ce niveau. Y compris en C#.
    C'est à toi de t'assurer que tes fichiers sont enregistrés (endianess et taille des données) correctement et de les lire dans le bon sens par la suite.
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Par défaut
    Bonjour,

    Je sais bien qu'il n'y a pas de magie en C, mais ma question c'est pas ça (du moins pour le langage C)

    Merci quand meme

  5. #5
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    As-tu la maîtrise de programme de la machine A ?

    Si oui, peut-être en prenant le problème à l'envers :

    écrire en big endian avec la machine A. Comment ? Avec les fonction htonx ?
    Le souci sera sûrement le double.
    Cet article peut t'aider.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Par défaut
    Merci pour la réponse,

    en fait je ne peux pas imposer aux autres machines (aux autres personnes de changer leur code qui écrit ces fichiers) car en fait le code écrit par quelqu'un d'autre à été écrit en C# et donc pas portable, ce qui veut dire que je dois savoir uniquement à partir du fichier l'endianess qui a été codé et la taille des variables dans le fichier. Je vais regarder l'article merci

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

Discussions similaires

  1. Lecture fichier binaire et inversion d'octets
    Par zoro_le_renard dans le forum Fortran
    Réponses: 8
    Dernier message: 17/07/2007, 20h35
  2. Lecture fichier binaire
    Par djidji dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 11h58
  3. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  4. Lecture fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 5
    Dernier message: 07/08/2006, 19h37
  5. Lecture fichier binaire
    Par gabule dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/05/2006, 15h53

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