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 :

Comparaison Binaire & Char


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par d�faut Comparaison Binaire & Char
    Bonjour � tous

    Je vous pr�sente ici mon probl�me car j'aimerais beaucoup comprendre ce qu'il se passe dans mon code et dans l'ex�cution du programme.

    J'ouvre un fichier en binaire (fichier de donn�es brutes qui importe peu en soi)
    Je d�clare ensuite un buffer d'une taille de 32, puis lis depuis mon stream.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    char buffer[SIZE_ENTRY];
    ifs.read(buffer, SIZE_ENTRY);
    Je d�clare ensuite quelques bool�ens avec des comparaisons entre le contenu du buffer et des constances connues � l'avance
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    bool deletedFile = buffer[0] == 0xe5 ;
    bool longName = buffer[0] == 0x41 || buffer[0] == 0x42;
    Et ici est mon probl�me
    La variable longName est valide, c'est a dire que la comparaison est bonne.
    Mais pas la variable deletedFile
    C'est extr�mement �trange, mais apr�s t�tonnement divers, pour qu'elle soit valide, il faut que ma comparaison soit
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    bool deletedFile = buffer[0] == 0xffffffe5 ;

    Pourquoi ?
    Jusqu'a pr�sent, toutes mes comparaisons fonctionnaient normalement (tel 0x42 un peu plus haut)
    De m�me qu'un dump de la section me confirme qu'il n'y a absolument aucune suite de 0xFF avant cet octet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    70 00 74 00 00 00 ff ff    6d 00 00 00 76 00 00 00
    e5 4f 4d 4f 50 45 52 53    57 4d 56 20 00 00 36 6b
    69 32 69 32 00 00 39 6b    69 32 0c 00 93 a3 7a 00
    La section d'octet que je copie est bien la seconde et la troisi�me ligne et le buffer est de toute fa�on �cras� par la lecture mais on peut tout de m�me voir que les octets pr�c�dents sont des 0x00 et non des 0xFF

    Merci pour toute explication
    PetroleVB

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu dois utiliser unsigned char.

    Un char sign� sup�rieur � 127 est n�gatif, donc quand il est promu en int...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Par d�faut
    Mon Dieu... c'�tait si simple ...

    effectivement, cela a march�
    j'ai du remanier le code un peu car les fstream prennent des char en entr�e,
    mon ifs.read ressemble maintenant �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ifs.read((char*)(&buffer[0]), SIZE_ENTRY);
    Merci pour cette r�ponse rapide

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Remplace ton cast C-style par un reinterpret_cast<>, inutile de mettre en danger la const-correctness de ton programme.

    Il devrait m�me �tre possible de rendre ton ifstream non-sign�, et ainsi s'affranchir compl�tement du cast.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [vba-excel] Comparaisons binaires
    Par CIBOOX dans le forum Macros et VBA Excel
    R�ponses: 15
    Dernier message: 13/02/2007, 14h33
  2. [T-SQL]convert champ binaire en char
    Par arona dans le forum Sybase
    R�ponses: 5
    Dernier message: 31/07/2006, 12h57
  3. Comparaison entre 2 char
    Par miron dans le forum C
    R�ponses: 8
    Dernier message: 29/05/2006, 12h56
  4. R�ponses: 3
    Dernier message: 22/09/2005, 10h34
  5. [SQL] Comparaison binaire ?
    Par webtheque dans le forum MS SQL Server
    R�ponses: 2
    Dernier message: 12/07/2005, 14h40

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