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 :

conversion en hexadecimal


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut conversion en hexadecimal
    Bonjour, je veux faire un code qui convertit un hexadecimal en entier.
    mais lorsque j'éxecute le code tout ce passe comme si leDecimal = LeChiffre
    lorsque je tape 1 j'obtiens 17. Pouvez vous m'aider à trouver une solution.
    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 <stdio.h>
    int main(void)
    {
    	char leHexa;
    	int leChiffre = 0;
    	int leDecimal=0;
    	do 
    	{
    		scanf("%c",&leHexa);
    		if (leHexa >= '0' && leHexa <= '9')
    			leChiffre = leHexa - '0';
    		/*else if (leHexa >= 'a' && leHexa <= 'f')
    			leChiffre = leHexa - 'a' + 10;*/
    		else if (leHexa >= 'A' && leHexa <= 'F')
    			leChiffre = leHexa - 'A' + 10;
     
     
    	leDecimal = (leDecimal*16)  + leChiffre;
    	}
    	while (leHexa != '\n');
    	printf("%d\n", leDecimal);
    	return 0;
    }

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par emprex Voir le message
    Bonjour, je veux faire un code qui convertit un hexadecimal en entier.
    Bah, et supposant que tu parles bien d'une chaine représentant un entier codé en hexadécimal, strtol() sait faire ça. Tu es obligé de réinventer la roue ?

  3. #3
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    C'est un exercice que je voudrais réaliser sans utiliser de fonction.
    en entrée 2E
    en sortie 46
    pour tenter de le faire je me suis inspirer de la fontion htoi()
    Mais je reste bloqué.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par emprex Voir le message
    C'est un exercice que je voudrais réaliser sans utiliser de fonction.
    en entrée 2E
    en sortie 46
    Il suffit d'associer une valeur à chaque caractère '0' à 'F'

    '0' -> 0
    '1' -> 1
    ...
    'E' -> 14
    'F' -> 15

    et faire les multiplications par 16 et les additions qui vont bien...

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par emprex Voir le message
    C'est un exercice que je voudrais réaliser sans utiliser de fonction.
    en entrée 2E
    en sortie 46
    Ton code est presque bon. Il ne faut pas traiter '\n', ça met le bazar :
    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 <stdio.h>
    int main (void)
    {
       int car;
       int leChiffre = 0;
       int leDecimal = 0;
     
       while ((car = getchar ()) != '\n')
       {
          if (car >= '0' && car <= '9')
             leChiffre = car - '0';
          /*else if (leHexa >= 'a' && leHexa <= 'f')
             leChiffre = leHexa - 'a' + 10; */
          else if (car >= 'A' && car <= 'F')
             leChiffre = car - 'A' + 10;
     
          leDecimal = (leDecimal * 16) + leChiffre;
       }
     
       printf ("%d\n", leDecimal);
       return 0;
    }
    Attention, c'est OK pour un codage ASCII (et oui, il faudrait traiter les minuscules ou faire un forçage en majuscule). Ce code n'est pas portable.

  6. #6
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    Merci beaucoups à tous les deux.
    Je remarque qu'il vaut mieux utiliser un while pour traiter un '\n' qu' un do while.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par emprex Voir le message
    Merci beaucoups à tous les deux.
    Je remarque qu'il vaut mieux utiliser un while pour traiter un '\n' qu' un do while.
    Oui, c'est la forme 'canonique'...

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Lorsque tu entres le '\n', leChiffre est inchangé et garde la valeur précédente mais tu fais quand même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leDecimal = (leDecimal*16)  + leChiffre;
    Conséquence, si tu tapes 1\n , il calcule 1*16+1 = 17!

  9. #9
    Membre éclairé Avatar de emprex
    Homme Profil pro
    auto-entrepreneur
    Inscrit en
    Octobre 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : auto-entrepreneur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2007
    Messages : 219
    Par défaut
    Dans ce cas, puis donner une valeur nulle au '\n', pour qu'il ne soit pas pris dans le calcul.

Discussions similaires

  1. [T-SQL]fonction de conversion en hexadecimal
    Par antigone dans le forum Sybase
    Réponses: 1
    Dernier message: 11/04/2007, 09h14
  2. conversion valeur hexadecimal / adresse mémoire
    Par saturne13 dans le forum C
    Réponses: 10
    Dernier message: 04/02/2007, 20h15
  3. [CONVERSION] String -> HEXADECIMAL ...
    Par tripop dans le forum Langage
    Réponses: 9
    Dernier message: 13/01/2005, 09h42
  4. [debutant][hexadecimal]Conversion entier hexadecimal
    Par Mobaladje dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/05/2004, 07h50
  5. Conversion binaire -> hexadecimal
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 06/08/2003, 10h40

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