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 :

Comment associer le code ASCII aux caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2007
    Messages : 31
    Par défaut comment associer a chaque caractère son code ASCII
    Créant en langage C un prog qui permet de convertir un message txt en binaire... en passant par les étapes suivantes:
    - convertir les caractère en code ASCII
    - convertir le code ASCII résultant en binaire.

    NB: je veux le créer juste en C et pas en C++

    alors le premier problème c'est comment associer a chaque caractère son code ASCII... aprés c'est de convertir le code en binaire...

    A:\MEDIUM

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Tu l'as déjà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
     
    int main(void)
    {
        printf("%d\n", 'A');
     
        return 0;
    }
    Ça va donner "65" à la console. T'as juste à te faire une fonction dec2bin(int) et y passer les caractères de ton string.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2007
    Messages : 31
    Par défaut
    Merci GnuVince
    je vais essayer avec ceci...
    merci encore

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2007
    Messages : 31
    Par défaut voila ce que j'ai arrivé a faire
    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
    /* Le probleme qui reste est:
    Aprés avoir associer a chaque caractere son code ASCII, 
    alors comment faire pour stoker ces codes dans un tableau
    dynamique? (c-a-d en utilisant un pointeur.)*/
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    main()
    {
    	char *i,*l;
    l=(char*)malloc(sizeof(char));
    printf("\tEntrez le texte a convertir en binaire\n");
    gets(l);
    printf("\n\n");
    printf("%s\n\n\n",l);
    for(i=l;*i;i++)
    printf("\t\t%c -----> en code ASCII [%d]\n",*i,*i);
    printf("\n\t\t\t");
    }

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, plusieurs petites choses :
    1) c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(void)
    {
    blabla;
    return 0;
    }
    2) enlève le cast avant le malloc
    2) tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *i,*l;
    l=(char*)malloc(sizeof(char));
    n'est-ce pas plus simple faire "simplement"

    3) utilises fgets à la place de gets

    4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i=l;*i;i++)
    printf("\t\t%c -----> en code ASCII [%d]\n",*i,*i);
    fait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned i;
    for(i=0;i<strlen(l);i++) /* strlen(l) == 1 */
    printf("\t\t%c -----> en code ASCII [%d]\n",l[i],i);

  6. #6
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par y.medium Voir le message
    Créant en langage C un prog qui permet de convertir un message txt en binaire... en passant par les étapes suivantes:
    - convertir les caractère en code ASCII
    - convertir le code ASCII résultant en binaire.

    NB: je veux le créer juste en C et pas en C++

    alors le premier problème c'est comment associer a chaque caractère son code ASCII... aprés c'est de convertir le code en binaire...


    Que veux-tu exactement dire par convertir en binaire? Lorsqu'elles sont chargées en mémoire ou enregistrées dans un fichier, les données textuelles sont toujours représentées sous forme binaire. Tu n'a rien à convertir...

    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++

    +

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2007
    Messages : 31
    Par défaut VOILA ...
    voila le role que ce prog.c doit jouer:
    1- lire une chaine de caractère.
    2- associer a chaque caractère son code ASCII.
    3- enrigistrer les codes ASCII des caractères du chaine dans un tableau dynamaique ( c-a-d avec un pointeur a la place d'un tableau T[max]).
    4- Convertir les codes ASCII (des entiers c-a-d de base 10) en base 2 c-a-d en binaire.

    pour 1,2 et 3 voila ce que j'ai arrivé a faire:
    lisez le commentaire Svp:
    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
     
     
    /* Le probleme qui reste est:
    Aprés avoir associer a chaque caractere son code ASCII, 
    alors comment faire pour stoker ces codes dans un tableau
    dynamique? (c-a-d en utilisant un pointeur.)*/
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    main()
    {
    	char *i,*l;
    l=(char*)malloc(sizeof(char));
    printf("\tEntrez le texte a convertir en binaire\n");
    gets(l);
    printf("\n\n");
    printf("%s\n\n\n",l);
    for(i=l;*i;i++)
    printf("\t\t%c -----> en code ASCII [%d]\n",*i,*i);
    printf("\n\t\t\t");
    }
    Pour l'étape numéro 4:

    Svp lisez bien le commentaire...

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    /*le probleme qui rest est:
    Puisque il existe des caracrteres qui ont des
    codes ASCII négatif (EXEMPLE: é a -126 comme code ASCII),
    Alors comment faire pour convertir les entiers négatifs
    en binaire?*/
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
     
    int a,*l,b,i,j,k,aide,stok;
    l=(int*)malloc(sizeof(int));
    printf("\t------------------------------------------------------------------------\n");
    printf("\tNB:Pour l'instant ce Programme est vrai juste pour les entiers positifs\n\n");
    printf("\t------------------------------------------------------------------------\n");
    do{
    printf("Entrez le nombre a converti en binaire: ");
    scanf("%d",&a);
    if(a<0)
    printf(" Lisez bien la remarque en haut. Merci\n\n\n");
    }while(a<0);
    stok=a;
    i=-1;
    do
    {
    	i++;
    	l[i]=a%2;printf("i=%d\n\tl[%d]=%d  avec a=%d\n",i,i,*(l+i),a);
    	b=a/2;printf("\tb=a/2=%d\n",b);
    	a=b;printf("\tle Nouveau a est:%d\n",a);
    	printf("-------------\n\n");
     
    }while(b);
    j=i;
    printf("----------------------------------------\n");
     
    for(j=0,k=i;j<k;j++,k--)
    {
    aide=*(l+j);
    *(l+j)=*(l+k);
    *(l+k)=aide;
    }
    printf("%d en decimal(base 10) est egale a ",stok);
    printf("(");
    for(j=0;j<=i;j++)
    printf("%d",*(l+j));
    printf(")");
    printf(" en binaire(base 2).\n\n\t\t\t");
    return 0;
    }

    voila ce que j'ai fait.... Devellopant nous ceci pour qu'il soit bien claire a tt le monde. Merci pour vous tous.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    4- Convertir les codes ASCII (des entiers c-a-d de base 10) en base 2 c-a-d en binaire.
    Erreur: Les codes ASCII en mémoire ne sont dans aucune base (à part la base 2 si on considère l'électronique) : Ils sont dans le format natif supporté par l'ordinateur.

    Il n'est question de "base" que quand le nombre est affiché ou représenté par une chaîne de caractères.
    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.

  9. #9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    main() // A corriger : int main(void) 
    {
    	char *i,*l;// ne pas utiliser l tout seul comme identificateur, ça ressemble trop à 1(un)
    l=(char*)malloc(sizeof(char)); //Ceci alloue un tableau de UN caractère.
    // Noter que sizeof(char) == 1. Pour N caractères :l=malloc(N);
    ...
    gets(l); //Utilise fgets et renonce à gets.
    // Comme le tableau n'a qu'un caractère, on a juste la place pour ...une ligne vide,sinon -> plantage
    // la place du tableau étant occupée par le 0 terminal
    ...
    for(i=l;*i;i++) // Ecrire explicitement de préférence *l !=0. 
    printf("\t\t%c -----> en code ASCII [%d]\n",*i,*i);// respecter l'indentation
    Pour l'étape 4, on verra plus tard. Pour l'instant, corrige ce code

  10. #10
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    S'il est juste question d'afficher une représentation binaire (je ne vois pas l'intérêt):

    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
    #include <stdio.h>
     
    void print_as_binary(unsigned long n)
    {
        int i = 0;
     
        while ((n >> i) != 0UL)
        {
            i++;
        }
     
        while (i >= 0)
        {
            printf("%ld", (n >> i) & 0x1);
            i--;
        }
    }
     
    int main(void)
    {
        char text[] = "abcdef";
        size_t i;
     
        for (i = 0; text[i] != 0; i++)
        {
            print_as_binary((unsigned char) text[i]);
            printf("(%d) ", (unsigned char) text[i]);
        }
        printf("\n");
     
        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++

    +

  11. #11
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2007
    Messages : 31
    Par défaut Ok je vais essyé avec ce que vous m avez dit...
    Ok je vais essyé avec ce que vous m avez dit
    de toute façon merci pour vous tous...

    en fait Thierry Chappuis ... Svp tu peux ecrire le code avec des commentaire a chaque insructions. Parcque j'arrive pa a comprendre ce code ...
    Est ce que c est du C ou C++?
    Pour l instant je travaile juste sur le C alors tout code en C++ va etre absurd pour moi ... lol ... (C'est juste pour l'instant)
    Merci

  12. #12
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    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
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
     
    /* -tc- fonction permettant d'afficher la representation binaire d'un entier 
        sur le flux de sortie standard */
    void print_as_binary(unsigned long n)
    {
        int i = 0;
     
        /* -tc- on recherche le nombre de bits nécessaire pour representer 
            la valeur */
        while ((n >> i) != 0UL)
        {
            i++;
        }
     
        /* -tc- on affiche tous la valeur de tous les bits un par un, du bit de 
            poids le plus fort au bit de poids le plus faible */
        while (i >= 0)
        {
            printf("%ld", (n >> i) & 0x1);
            i--;
        }
    }
     
    int main(void)
    {
        /* -tc- on definit une chaine de test */
        char text[] = "abcdef";
        size_t i;
     
        /* -tc- pour chaque caractere de la chaine, on affiche sa representation
            binaire */
        for (i = 0; text[i] != 0; i++)
        {
            print_as_binary((unsigned char) text[i]);
            printf("(%d) ", (unsigned char) text[i]);
        }
        printf("\n");
     
        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++

    +

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2009, 22h43
  2. Comment écrire un shell qui transforme un code ascii en caractère?
    Par jack-ft dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 21/04/2008, 17h51
  3. Comment récupérer le code ASCII d'un caractère?
    Par Blue_Strike dans le forum Delphi
    Réponses: 6
    Dernier message: 04/05/2007, 00h38
  4. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04

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