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 :

Des problèmes avec l'hexadécimal


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 65
    Par défaut Des problèmes avec l'hexadécimal
    J'ai écrit un programme qui convertir des entiers du décimal en hexadécimal et j'ai stocké les résultats dans des variables de type string. Maintenant je veut trié la structure de donnée qui contient ces chaines de caractères en ordre croisant. J'ai utilisé la fonction std::sort mais le problème c'est que cette fonction place les lettres avant les numéros.
    exemple:
    2b8f
    2ba8
    2bbf
    457
    par exemple, il faudrait que "457" soit placé avant "2b8f".
    De plus , je voudrais faire la comparaison et la déférence entre 2 éléments.Est ce que je doit convertir encore une fois les éléments au type int pour faire ceci??ou-bien il existe d'autres méthodes pour le faire??
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Bonjour,

    Citation Envoyé par Imene MI Voir le message
    par exemple, il faudrait que "457" soit placé avant "2b8f".
    De plus , je voudrais faire la comparaison et la déférence entre 2 éléments.Est ce que je doit convertir encore une fois les éléments au type int pour faire ceci??ou-bien il existe d'autres méthodes pour le faire??
    Merci de votre aide.
    Non, il suffit de comparer les chaînes entre elles. En C, c'est avec strcmp(). En C++, tu dois pouvoir le faire directement.

    Si tu veux écrire la fonction de comparaison toi-même, il suffit de comparer le premier caractère de chacune d'elles et de passer au suivant tant que les caractères comparés sont égaux.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hia,
    Citation Envoyé par Imene MI Voir le message
    De plus , je voudrais faire la comparaison et la déférence entre 2 éléments.Est ce que je doit convertir encore une fois les éléments au type int pour faire ceci??ou-bien il existe d'autres méthodes pour le faire??
    La question est : pourquoi faire une conversion en string alors que tu savais qu'il y avait encore des calculs à faire ?

    Il aurait été bien plus simple de faire le tri directement sur les entiers, faire les différences, PUIS passer en string pour affichage.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 65
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hia,

    La question est : pourquoi faire une conversion en string alors que tu savais qu'il y avait encore des calculs à faire ?

    Il aurait été bien plus simple de faire le tri directement sur les entiers, faire les différences, PUIS passer en string pour affichage.
    je dois tout d'abord remplir la structure de données par les chaines , et faire les comparaisons et les déférence après

    Citation Envoyé par Obsidian Voir le message
    Bonjour,



    Non, il suffit de comparer les chaînes entre elles. En C, c'est avec strcmp(). En C++, tu dois pouvoir le faire directement.

    Si tu veux écrire la fonction de comparaison toi-même, il suffit de comparer le premier caractère de chacune d'elles et de passer au suivant tant que les caractères comparés sont égaux.
    je peux faire la soustraction et la comparaison (>,<...) comme lle faire pour les entiers en base 10

  5. #5
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    Citation Envoyé par Imene MI Voir le message
    J'ai écrit un programme qui convertir des entiers du décimal en hexadécimal et j'ai stocké les résultats dans des variables de type string. Maintenant je veut trié la structure de donnée qui contient ces chaines de caractères en ordre croisant. J'ai utilisé la fonction std::sort mais le problème c'est que cette fonction place les lettres avant les numéros.
    exemple:
    2b8f
    2ba8
    2bbf
    457
    par exemple, il faudrait que "457" soit placé avant "2b8f".
    Merci de votre aide.
    Je pense que l'algo std::sort est adapté a ton problème (la valeur ASCII des caractères étant das le bon ordre).
    Par contre, pour que le tri se fasse correctement il faut impérativement que les chaines aient la MEME longueur.

    ici ton "457" passe en dernier à cause du '4' il faut "padder" a 4 caractères soit "0457" et tout ira bien

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 65
    Par défaut
    Citation Envoyé par pascalCH Voir le message
    Je pense que l'algo std::sort est adapté a ton problème (la valeur ASCII des caractères étant das le bon ordre).
    Par contre, pour que le tri se fasse correctement il faut impérativement que les chaines aient la MEME longueur.

    ici ton "457" passe en dernier à cause du '4' il faut "padder" a 4 caractères soit "0457" et tout ira bien
    comment je peut faire ceci.
    pour arriver à convertir du int à hexadécimal j'utilise ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int addrs;
    ostringstream oss;
    oss<<hex<<adrs;
     
    string str=oss.str();

  7. #7
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int addrs;
    ostringstream oss;
    oss << hex << setw(4) << setfill('0') << right << adrs;

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Tu n'as pas besoin de faire toi-même la conversion en hexa. Tu peux utiliser printf pour afficher ta valeur en hexa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int entier=10;
    printf("valeur entier : %x",entier);
    Tu restes en int, tu fais ton tri dessus.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 65
    Par défaut
    Citation Envoyé par pascalCH Voir le message
    comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int addrs;
    ostringstream oss;
    oss << hex << setw(4) << setfill('0') << right << adrs;
    Merci beaucoup, ça marche très bien.

    Citation Envoyé par chrtophe Voir le message
    Tu n'as pas besoin de faire toi-même la conversion en hexa. Tu peux utiliser printf pour afficher ta valeur en hexa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int entier=10;
    printf("valeur entier : %x",entier);
    Tu restes en int, tu fais ton tri dessus.
    Merci pour l'aide , c'est une bonne idée.

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

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 31/12/2007, 23h26
  2. Encoe des problèmes avec DAO
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/09/2007, 21h46
  3. Des problèmes avec Internet Explorer
    Par franc82 dans le forum Windows XP
    Réponses: 8
    Dernier message: 26/02/2007, 16h33
  4. j'ai des problèmes avec un virus
    Par beencss dans le forum Sécurité
    Réponses: 4
    Dernier message: 02/02/2007, 13h56

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