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 :

Lecture binaire char arrêt 00


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut Lecture binaire char arrêt 00
    Bonjour tout le monde voila je rencontre un petit problème.
    Comment faire pour que mon char[4] ne contienne que 4 caractère est non 9(étant donné que la il va jusqu'au null byte)


    (je lis le le fichier en mode binaire et voici le code de ma structure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char masterid[4];
    char type[4];
    int master_version;
    int sub_version;
    int nblocks;
    char reserved[108];
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    l'erreur est seulement au niveau de l'affichage (cf debug).

    Je sais pas trop comment afficher seulement 4 caracteres (faut regarder dans les options de cout).
    Mais sinon tu peux avoir une structure type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Foo {
       char masterid[5];
       char type[5];
       int master_version;
       int sub_version;
       int nblocks;
       char reserved[109];
    };
    Et tu initialises tes chaines a {0} (ou des std::string)

    Le problème c'est qu'il faut lire champs par champ le fichier.

    Mais si tu ne souhaite que traiter le résultat, ça ne pose aucun soucis ce que tu as actuellement, tant que tu penses bien à définir une limite à 4 octets quand tu lis tes strings et pas à attendre le '\0'.

    Hope it helps.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut
    Malheureusement je souhaite traiter les résultats pour justement vérifier si il s'agit de la bonne structure de fichier.

    "tant que tu penses bien à définir une limite à 4 octets quand tu lis tes strings et pas à attendre le '\0'."

    Et comment on défini cette limite sachant que je ne suis pas sur des string mais bien des chars(enfin si je ne me trompe pas).

    Je suis donc obligé de passé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string masterid = bufferKFheader.masterid;
            masterid.resize(4);
    Il n'existe pas plus court pour directement lire uniquement 4char :s

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    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 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    c'est juste l'affichage en debug qui est "mauvais" comme dit plus haut.
    Pour n'afficher que 4 caractères et bien... pour quoi faire ?
    Tu peux très bien créer une string de 4 caractères, y'a des constructeurs pour ça.
    Pour tester la valeur, un coup de memcmp fait l'affaire, ou bien passer par une string temporaire, ou bien utiliser les bonnes méthodes de string tout simplement.

    En bref : http://www.cplusplus.com/reference/string/string/
    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.

  5. #5
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Comme dit, memcmp fais l'affaire pour debug (ou s'assurer d'un résultat)

    La limite de 4 octets dont je parle est celle que tu auras quand tu utiliseras ces string : en gros au lieu de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i =0;
    while(foo.masterid[i] != 0) {
       // utiliser foo.masterid[i]...
       ++i;
    }
    faire plutot un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0; i<4 || ... ; ++i) {
       // utiliser foo.masterid[i]...
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut
    Effectivement je comprend mon erreur ^^

    Merci à vous deux

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

Discussions similaires

  1. Lire le format d'images PPM : de la lecture binaire ou texte des fichiers
    Par cladsam dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 08/05/2007, 12h35
  2. lecture binaire sur un flux
    Par zais_ethael dans le forum C++
    Réponses: 9
    Dernier message: 29/08/2006, 01h11
  3. Lecture binaire
    Par Rupella dans le forum C++
    Réponses: 1
    Dernier message: 21/04/2006, 13h43
  4. Réponses: 27
    Dernier message: 12/01/2006, 11h04
  5. tester wmp1="lecture" et wmp1="arrêté"
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/01/2006, 09h39

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