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 :

[debutant] caractere <=> ascii


Sujet :

C

  1. #1
    Inactif
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Par défaut [debutant] caractere <=> ascii
    Bonjour,

    Comment convertir un caractere vers son code ascii et vice versa ?

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut

    La valeur ascii se trouve dans ta variable de type char tu peux y accéder via %c, %d, %x, etc.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    unsigned char lettre;
     
    /* Désolé pour le getchar, moi et la saisie de caractère ça fait 2 */
    lettre = getchar();
     
    printf("Caractere : %c\nCode ASCII (decimal) : %d\nCode ASCII (hexa) : %x", lettre, lettre, lettre);

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Ce n'est pas du tout difficile.

    Un petit exemple qui donne la lettre en fonction du code ascii :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char caractere=70;
    printf("Au code ascii %d correspond la lettre %c\n",caractere,caractere);
    Et inversement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char caractere='w';
    printf("Au caractere %c correspond le code ASCII %d\n",caractere,caractere);

  4. #4
    Inactif
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Par défaut
    Citation Envoyé par Freed0
    Salut

    La valeur ascii se trouve dans ta variable de type char tu peux y accéder via %c, %d, %x, etc.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    unsigned char lettre;
     
    /* Désolé pour le getchar, moi et la saisie de caractère ça fait 2 */
    lettre = getchar();
     
    printf("Caractere : %c\nCode ASCII (decimal) : %d\nCode ASCII (hexa) : %x", lettre, lettre, lettre);
    Je veux que le code ascii soit enregistrer vers un int .

    Exp:
    int nbr = codeAscii("A");
    char chr = caract(65);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Par défaut
    En c, il n'y a pas de difference entre les characteres et les entiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int valeurAscii = 'A';

  6. #6
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    en fait, si tu veux faire des calculs avec le code ascii, tu n'as a la limite meme pas besoin de le convertir ! ces expressions ont du sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char c='R';
    c=c+2-'z';

  7. #7
    Inactif
    Inscrit en
    Février 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 25
    Par défaut
    Citation Envoyé par atnnn
    En c, il n'y a pas de difference entre les characteres et les entiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int valeurAscii = 'A';
    Je veux affecter le code ascii d'un caracter vers une variable de type entier et pas afficher son code ascii.

    exp:
    int nbr = codeAscii("A");
    char chr = caract(65);

    printf("Le code ascii de %c est %d", chr, nbr);
    et non pas
    printf("Le code ascii de %c est %d", chr, chr);

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Bah oui mais justement c'est ça le truc en C. Le %c %d ne joue que sur la représentation à l'écran. Pas besoin d'une fonction spéciale pour manipuler les codes ASCII des caractères. Pour info, un char est codé sur 8 bits et un int sur 32 bits sur x86 je crois (processeur 32 bits). Mettre la valeur d'un char dans un entier ça ne sert strictement à rien puisque les deux sont manipulables de la même façon. La table ASCII tient juste sur 8 bits par contre.
    Quand tu dis je veux ça mais pas ça ça, en fait ce sont deux constructions identiques

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Par défaut
    Le charactere A est represente par 'A' et non "A" en C.

    Voici deux definitions qui font ce que tu veut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define codeAscii(c) c
    #define caract(c) c
     
    int nbr = codeAscii('A');
    char chr = caract(65);
     
    printf("Le code ascii de %c est %d", chr, nbr);
    Pourquoi es-ce que ca marche? Par ce que, en C, 'A' == 65:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char chr = 'A';
    if(c==65){
      puts("Hello, world!");
    }
    Il n'y a aucune difference entre un charactere et sa representation ascii, qui est codee sur 7 bits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("Le code ascii de %c est %d", 65, 'A');

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Et ceci est valable pour tous les caractères ASCII (0 à 127) sur une plate-forme en ASCII (évidemment, sur une plate-forme en EBCDIC, ça ne marchera pas).
    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.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Ici, des hypothèses sont faites sur les valeurs :
    Citation Envoyé par jobherzt
    en fait, si tu veux faire des calculs avec le code ascii, tu n'as a la limite meme pas besoin de le convertir ! ces expressions ont du sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char c='R';
    c=c+2-'z';
    Sans oublier toutes les apparitions du nombre 65 dans le thread.

    Et je voulais surtout mettre l'accent sur le fait que ça ne marche pas forcément en ASCII étendu, principalement à cause des soucis de signe.
    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.

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et il y a les fonctions toascii() .... pour de l'ascii 7bits...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <ctype.h> 
     
    int toascii(int c);


  13. #13
    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 souviron34
    et il y a les fonctions toascii() .... pour de l'ascii 7bits...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <ctype.h> 
     
    int toascii(int c);
    Rien de tel dans la bibliothèque standard du langage C. Je connaissais l'extension isascii() de Borland...

    Quand à l' "ASCII 7-bit", c'est l'ASCII, tout simplement, je n'en connais pas d'autres...

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Rien de tel dans la bibliothèque standard du langage C. Je connaissais l'extension isascii() de Borland...

    Quand à l' "ASCII 7-bit", c'est l'ASCII, tout simplement, je n'en connais pas d'autres...
    référence toascii :

    http://www.opengroup.org/onlinepubs/...s/toascii.html

    référence ascii 8 bits (ou ascii étendu) (nom de norme UTF8, nom usuel ascii 8 bits) :

    http://fr.wikipedia.org/wiki/UTF-8

    entre autres....

    Mais je suis d'accord que c'est un abus de langage...

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Citation Envoyé par souviron34
    Derived from Issue 1 of the SVID.
    Sachant que SVID est System V Interface Definition, toascii() n'est donc pas standard, mais SUS.
    http://en.wikipedia.org/wiki/List_of_C_functions
    http://en.wikipedia.org/wiki/Ctype.h

    référence ascii 8 bits (ou ascii étendu) (nom de norme UTF8, nom usuel ascii 8 bits) :
    Perdu, UTF-8 n'est pas l'ASCII étendu: c'est de l'unicode, et c'est un ASCII étendu, tout comme ISO 8859-1, Windows CP1252, etc.
    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.

  16. #16
    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 souviron34
    Et ? OK, c'est POSIX.1, mais ce n'est pas standard C. Il faut être précis quand on cite une fonction, sinon, on crée la confusion et ça génère des question inutiles...
    La doc de POSIX.1 est on ne peut plus claire :

    http://www.opengroup.org/onlinepubs/...s/ctype.h.html
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    DESCRIPTION
     
        [CX] [Option Start] Some of the functionality described on this reference page extends the ISO C standard. Applications shall define the appropriate feature test macro (see the System Interfaces volume of IEEE Std 1003.1-2001, Section 2.2, The Compilation Environment) to enable the visibility of these symbols in this header. [Option End]
     
        The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided.
     
        int   isalnum(int);
        int   isalpha(int);
        [XSI][Option Start]
        int   isascii(int);
        [Option End]
        int   isblank(int);
        int   iscntrl(int);
        int   isdigit(int);
        int   isgraph(int);
        int   islower(int);
        int   isprint(int);
        int   ispunct(int);
        int   isspace(int);
        int   isupper(int);
        int   isxdigit(int);
        [XSI][Option Start]
        int   toascii(int);
        [Option End]
        int   tolower(int);
        int   toupper(int);
     
        The following are defined as macros:
     
        [XSI][Option Start]
        int   _toupper(int);
        int   _tolower(int);
        [Option End]
    Ce qui est noté XSI est une extension du langage C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    XSI Extension [Option End]
    The functionality described is an XSI extension. Functionality marked XSI is also an extension to the ISO C standard. Application writers may confidently make use of an extension on all systems supporting the X/Open System Interfaces Extension.
     
    If an entire SYNOPSIS section is shaded and marked XSI, all the functionality described in that reference page is an extension. See XSI Conformance .
     
    See help on Margin Code Notation.

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

Discussions similaires

  1. Urls et caractere autres que ASCII
    Par Shirraz dans le forum Référencement
    Réponses: 6
    Dernier message: 31/05/2009, 09h41
  2. [debutant]Transformation String to ASCII
    Par noname_971 dans le forum Java ME
    Réponses: 1
    Dernier message: 16/05/2008, 14h39
  3. caracteres speciaux (non ASCII)
    Par yvesall dans le forum C
    Réponses: 8
    Dernier message: 17/09/2007, 10h39
  4. [Débutant][String] Remplacez les caractères speciaux
    Par paf15 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/04/2004, 22h39
  5. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/07/2003, 09h50

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