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 :

Convertir un entier en code ASCII


Sujet :

C

  1. #1
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut Convertir un entier en code ASCII
    Bonjour, j'ai un petit soucis, j'ai cherché sur google mais je n'ai pas vraiment trouvé de réponse.
    Je souhaite convertir un entier en ASCII.
    Par exemple, j'ai dans une variable entière la valeur 1 et je souhaiterais récupérer la valeur 0x31 (valeur ASCII de 1).
    Auriez-vous des pistes pour m'aider, merci

  2. #2
    Membre habitué
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Points : 166
    Points
    166
    Par défaut
    Tu peux faire un scanf("%c",&a) suivi de printf("%d",a)

  3. #3
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut
    merci, j'ai vu que cela fonctionnait car je l'avais testé, mais dans mon programme, je n'ai rien a afficher, je mets directement la valeur dans une variable char.

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Tu peux utiliser sprintf():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void)
    {
        int val = 1;
        char texte[12] = "";
     
        sprintf(texte, "%d", val);
        printf("Le code caractère du chiffre 1 est 0x%x\n", (unsigned char) texte[0]);
     
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Le C portable pur et dur ne connait pas grand-chose de l'ASCII, ni même de la représentation des caractères. Tout au plus peut-on être certains que les caractères de '0' à '9' sont en séquence, donc que (char)('4' + 2) est bien le caractère '6'.
    Mais dans la vraie vie, <ctype.h> vous donnera sans doute la fonction:
    int toascii(int c)

    Edit:
    J'avais peut-être mal lu votre question. En fait vous devez passer de "quelque chose" à un char (voir autres réponses), puis de ce char au mieux au code ASCII (là, c'est toascii()), ou au pire à la valeur castée en unsigned char de votre char.

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    Le C portable pur et dur ne connait pas grand-chose de l'ASCII, ni même de la représentation des caractères. Tout au plus peut-on être certains que les caractères de '0' à '9' sont en séquence, donc que (char)('4' + 2) est bien le caractère '6'.
    Mais dans la vraie vie, <ctype.h> vous donnera sans doute la fonction:
    int toascii(int c)
    C'est une fonction qui n'a plus guere d'utilite et ce qu'elle fait n'a aucun rapport avec ce qui est demande ici.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Code ASCII est un abus de langage que beaucoup de débutants utilisent pour désigner le code d'un caractère dans un encodage donné. Ici, je pense que le PO désire afficher le code caractère d'un chiffre selon l'encodage utilisé par sa machine.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Tu peux utiliser sprintf():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void)
    {
        int val = 1;
        char texte[12] = "";
     
        sprintf(texte, "%d", val);
        printf("Le code caractère du chiffre 1 est 0x%x\n", (unsigned char) texte[0]);
     
        return 0;
    }
    Thierry
    Merci, j'avais également essayé cette méthode qui ne correspond pas à ce que je souhaite mais qui fonctionne bien par ailleurs.

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Merci, j'avais également essayé cette méthode qui ne correspond pas à ce que je souhaite mais qui fonctionne bien par ailleurs.
    En quoi mon code ne fait-il pas ce que tu souhaites?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Merci, j'avais également essayé cette méthode qui ne correspond pas à ce que je souhaite mais qui fonctionne bien par ailleurs.
    Il vous faut faire un petit effort pour expliquer ce que vous souhaitez. A pire par une paire d'exemples...

  11. #11
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut
    Désolé je vais essayer d'être plus explicite.
    Vos codes pour voir l'ASCII sont terminés par l'instruction "printf".
    Moi ce que je veux c'est plus exactement cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char c;
    int p = 1;
     
    c = fonction(p);
    et que dans c, j'ai directement 0x31


    Voilà, j'espère que je me suis mieux exprimé!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Bonjour, j'ai un petit soucis, j'ai cherché sur google mais je n'ai pas vraiment trouvé de réponse.
    Je souhaite convertir un entier en ASCII.
    Par exemple, j'ai dans une variable entière la valeur 1 et je souhaiterais récupérer la valeur 0x31 (valeur ASCII de 1).
    Auriez-vous des pistes pour m'aider, merci
    Il suffit d'ajouter la valeur '0' au nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int x = 3;
    int c = x + '0'; /* '3' (portable)  ou 0x33 si le codage est ASCII */
    int c = x + 0x30; /* (portable)  si le codage désiré est ASCII indépendamment du charset courant */
    Evidemment, ça ne fonctionne que pour un chiffre (0-9).

    Si tu veux convertir un nombre en sa représentation textuelle décimale, il faut utiliser sprintf() avec "%d".

    La chaine résultante peut être ASCII ou non, selon le charset en vigueur sur ta machine.
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Désolé je vais essayer d'être plus explicite.
    Vos codes pour voir l'ASCII sont terminés par l'instruction "printf".
    Moi ce que je veux c'est plus exactement cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char c;
    int p = 1;
     
    c = fonction(p);
    et que dans c, j'ai directement 0x31


    Voilà, j'espère que je me suis mieux exprimé!
    Désolé, non, pas vraiment. Déjà, que souhaitez-vous si p est égal à 123 ? Ensuite, le 0x31 fait craindre une incompréhension. Comme le c qui devrait être un int. 0x31 ou 49, pour vous, c'est pareil ou pas ?
    Enfin, mais là c'est plus marginal, souhaitez-vous le "code ASCII" ou la représentation du "chiffre" sur votre machine ?

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Désolé je vais essayer d'être plus explicite.
    Vos codes pour voir l'ASCII sont terminés par l'instruction "printf".
    Moi ce que je veux c'est plus exactement cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char c;
    int p = 1;
     
    c = fonction(p);
    et que dans c, j'ai directement 0x31


    Voilà, j'espère que je me suis mieux exprimé!
    Ben, il est où le problème? texte[0] contient la valeur que tu cherches, non? La technique proposée par Emmanuel te permet de trouver facilement le code caractère de n'importe quel chiffre de 0 à 9.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut
    Mon but final est de calculer un CRC.

    Les valeurs contenues dans ma chaine de caractère sont

    Les lettres de A à Z
    Les chiffres de 0 à 9
    et le caractère ","

    Dans ma chaîne de caractère, j'ai la chose suivante :

    chaine[0] = 80 (Lettre P ou 0x50)
    chaine[1] = 77 (Lettre M ou 0x4D)
    .... j'ai 33 caractères dans ma chaine.

    Je souhaiterais faire la checksum caractère par caractère avec un XOR. Or lui, me fait 80 XOR 77, moi je voudrais 0x50 XOR 0x4D. Ou alors faire toute la checksum avec les nombres décimales mais faire la conversion en héxa à la fin, voilà

  16. #16
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Je souhaiterais faire la checksum caractère par caractère avec un XOR. Or lui, me fait 80 XOR 77, moi je voudrais 0x50 XOR 0x4D. Ou alors faire toute la checksum avec les nombres décimales mais faire la conversion en héxa à la fin, voilà
    C'est bien ça, 0x31 -> incompréhension...
    Décimal ou hexadécimal, ce n'est que pour la chaîne de caractères qui représente le nombre ou le chiffre. Pour la machine, un nombre estun nombre, d'une certaine taille. Vous n'avez pas à vous préoccuper d'hexadécimal dans votre calcul.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fabpeden Voir le message
    Mon but final est de calculer un CRC.

    Les valeurs contenues dans ma chaine de caractère sont

    Les lettres de A à Z
    Les chiffres de 0 à 9
    et le caractère ","

    Dans ma chaîne de caractère, j'ai la chose suivante :

    chaine[0] = 80 (Lettre P ou 0x50)
    chaine[1] = 77 (Lettre M ou 0x4D)
    .... j'ai 33 caractères dans ma chaine.

    Je souhaiterais faire la checksum caractère par caractère avec un XOR. Or lui, me fait 80 XOR 77, moi je voudrais 0x50 XOR 0x4D. Ou alors faire toute la checksum avec les nombres décimales mais faire la conversion en héxa à la fin, voilà
    Il n'y a absolument rien à convertir. La notation 80 vs 0x50 n'est qu'une convention de représentation. Ce qui compte pour les calculs, c'est la valeur représentée par la combinaison des bits : en l'occurence : 0101000.

    Il suffit donc de mettre les caractères dans un tableau de unsigned char et de faire le CRC sur 8-bit (je suppose) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    unsigned char s[] = {'A', 'B', 'C', 'D', ',', '1', '2', '3', '4'};
    unsigned int mon_crc = crc (s, sizeof s);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int crc (unsigned char const *s, size_t len);
    que je te laisse détailler.

    Si tu veux une représentation hexa, tu utilises le format "%02X" dans le [s]printf().
    Pas de Wi-Fi à la maison : CPL

  18. #18
    Membre du Club Avatar de fabpeden
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 131
    Points : 60
    Points
    60
    Par défaut
    Merci pour toutes vos explications cela fonctionne parfaitement!

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

Discussions similaires

  1. Convertir du caractère au code ASCII
    Par Midou45 dans le forum Débuter
    Réponses: 3
    Dernier message: 03/05/2008, 10h43
  2. [Free Pascal] Convertir un code ASCII en entier
    Par JoseF dans le forum Free Pascal
    Réponses: 13
    Dernier message: 04/04/2006, 19h30
  3. Convertir un mot en code ascii
    Par w0lf dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/01/2006, 14h17
  4. fonction redonnant le code ascii d'un entier ???
    Par abignon dans le forum MFC
    Réponses: 4
    Dernier message: 29/01/2004, 12h32
  5. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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