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

Langage C++ Discussion :

[Langage] valeur hexa dans un char ? comment les récupérer ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut [Langage] valeur hexa dans un char ? comment les récupérer ?
    Bonjour,

    Voila, j'ai des tableaux de char que j'initialise avec du code hexa de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char mavariable[3] = { (char) 0xCE, (char) 0xFE, (char) 0x7F }
    Et j'aimerais ensuite pouvoir récupérer le code hexa, c'est a dire, écrire à l'écran par exemple :
    Mais en mode debug, quand je regarde ce qu'il y a dans mon tableau, c'est bizarre... lol et bien sur un TRACE (après avoir ajouté un '\0' de fin de chaine) affiche des choses tout aussi bizarre... lol

    Bref, si quelqu'un si connait un peu en hexa et m'expliquer comment je pourrais faire pour mon problème... ?

    Merci
    Bonne soirée
    ++

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 450
    Par défaut
    Citation Envoyé par italiasky Voir le message
    Mais en mode debug, quand je regarde ce qu'il y a dans mon tableau, c'est bizarre... lol et bien sur un TRACE (après avoir ajouté un '\0' de fin de chaine) affiche des choses tout aussi bizarre... lol
    Si tu nous montrais ce que tu vois dans ton tableau, on pourrait te dire pourquoi c'est bizarre.

    L'hexadécimal n'est qu'une forme parmi d'autre pour représenter un nombre. Tu aurais pu tout aussi bien utiliser le décimal, ou les chiffres romains, tu aurais quand même représenté la même valeur.

    Or, étant donné que tu as déclaré un tableau de caractères, et bien la fonction d'affichage que tu utilises doit problablement afficher des caractères. Ceux-là mêmes dont les codes ASCII (on présume) correspondent aux valeurs que tu as saisies.

    Si tu veux retrouver les valeurs saisies et, accessoirement, les afficher en hexadécimal à l'écran. Il faut les convertir en entier et demander au flux de sortie de choisir la bonne base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << hex << (int)mavariable[x];
    Sauf qu'ici, tu vas avoir un problème supplémentaire : tes char sont à priori signés. Il faut d'abord les convertir en unsigned char pour éliminer la considération du signe tout en gardant le même format, puis les convertir en entier pour qu'ils soient affichés comme des nombres, et pas des caractères, par le flux de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << hex << (unsigned int)(unsigned char)mavariable[x];
    C'est tordu, mais la première ligne fonctionne si tu déclares tout de suite ton tableau comme étant unsigned char au lieu de char tout court.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Règle Cout en hexa, majuscule, avec des zéros plutôt que des espaces
    std::cout << std::hex << std::uppercase << std::setfill('0');
    for(size_t i=0 ; i<3 ; i++)
    {
    	unsigned char valeur = mavariable[i];
    	if(i != 0)
    		std::cout << ", ";
    	//Affiche la valeur en hexa sur deux chiffres
    	std::cout << std::setw(2) << static_cast<int>(valeur);
    }
    std::cout << std::endl;
    Ne pas oublier de remettre cout en normal ensuite. En fait, je conseillerais plutôt de bosser sur un ostringstream intermédiaire...
    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.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    ah effectivement merci, ca fonctionne

    bonne soirée
    ++

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

Discussions similaires

  1. Erreurs php, comment les récupérer dans une string?
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 30/10/2008, 19h25
  2. Réponses: 3
    Dernier message: 25/09/2008, 10h26
  3. Placer la valeur "vide" dans un char
    Par jmnicolas dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 12/06/2008, 18h08
  4. Remplacement d'une valeur hexa dans une chaine
    Par raoulchatigre dans le forum C++
    Réponses: 7
    Dernier message: 18/09/2006, 16h27
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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