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 :

Comportement que je ne comprends pas dans un convercion en Hexa


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut Comportement que je ne comprends pas dans un convercion en Hexa
    Bonjour

    j'essaie de convertir un tableau caractères en hexa (les valeurs viennent d'un fichier en EBCDIC).
    Quand je fais une conversion avec sprintf ou std::hex, toutes valeures au dessus de 80 (en hexa) ne sont pas bonnes :
    exemple, au lieux d'avoir D3, j'ai FFFFFF45
    un bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string strToHexStr(char *str, int lenght) {
     
    	char *cpold = str;
    	string strRet = "";
    	int num;
    	char tmp[2];
    	for (int i = 0; i < lenght; i++) {
    		sprintf(tmp, "%02X", (char) (*cpold++));
     
    		strRet.append(tmp);
    	}
     
    	return strRet;
    }
    Est ce qq a une idée du problème?
    Merci d'avance

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(tmp, "%02X", (unsigned char) (*cpold++));
    peut être ?

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Comme le dit Jenna, c'est un problème de signe. Lorsqu'on manipule un buffer comme des octets, il faut toujours utiliser le type non signé. Cela pourrait donner en reprenant ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <algorithm>
    #include <iterator>
    #include <sstream>
     
    std::string strToHexStr(unsigned char *str, int lenght)
    {
       std::ostringstream oss117;
       oss117<<std::hex;
       std::copy(
          str,
          str+lenght,
          std::ostream_iterator<unsigned>(oss117,"")
       );
    	return oss117.str();
    }
     
    #include <iostream>
    int main()
    {
       unsigned char tab[]={0x1,0x2,0x3,0x81,0x82,0x83};
       std::cout <<strToHexStr(tab, sizeof(tab)/sizeof(tab[0]))<<std::endl;
       return 0;
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    Merci a vous 2, maintenant mon code marche nickel

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

Discussions similaires

  1. Erreur dans le code que je ne comprends pas
    Par Meditation dans le forum Android
    Réponses: 7
    Dernier message: 11/10/2013, 17h42
  2. Requête ayant un comportement que je ne comprends pas
    Par Kropernic dans le forum Développement
    Réponses: 0
    Dernier message: 08/09/2011, 12h25
  3. comportement que je ne comprend pas
    Par etienne.clopeau dans le forum Général Python
    Réponses: 15
    Dernier message: 17/07/2010, 23h37
  4. comportement de ifstream que je ne comprend pas
    Par Michaeljackfan dans le forum Langage
    Réponses: 5
    Dernier message: 19/09/2009, 14h21
  5. Réponses: 33
    Dernier message: 02/02/2009, 22h25

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