Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

conversion



  1. #1
    marco05

    conversion


    ------

    bonsoir a tous,
    comment passer du code ascii au code decimal avec le language c?
    mérci

    -----

  2. Publicité
  3. #2
    PA5CAL

    Re : conversion

    Bonsoir

    Je pense que cette question n'est pas dans la bonne rubrique. Ici on traite plus les questions d'électronique que d'informatique.

    Quand tu évoques le « code décimal », j'imagine que tu parles du codage BCD (Binary Coded Decimal) des chiffres de 0 à 9.

    Les codes ASCII des chiffres de 0 à 9 vont respectivement de 48 à 57 (de 30h à 39h en hexadécimal). Il suffit donc de retrancher 48 (soit 0x30 ou '0' en langage C) au code ASCII du chiffre traité pour obtenir son code BCD. Le code source correspondant est :
    Code:
    code_BCD = code_ASCII - '0';
    Bien entendu, seuls les 4 bits de poids faible du résultat sont significatifs.

  4. #3
    gienas

    Re : conversion

    Bonsoir marco05 et tout le groupe

    Citation Envoyé par PA5CAL Voir le message
    ...
    Code:
    code_BCD = code_ASCII - '0';
    ...
    C'est vrai que ceci est une manière d'écrire. Bien entendu, il convient, au préalable, de vérifier que le code ascii est dans la fourchette numérique, sinon le résultat risque de poser de sérieux problèmes.

    Comme on nous dit pas ce qui est à convertir, au juste, il peut y avoir des décimales, probablement séparées par un point.

    Comme on ne sait pas non plus de quel C il s'agit, on peut utiliser les fonctions ad hoc, comme par exemple itoa(int); qui est la réciproque du atoi(*char);

    Il y a la série pour tous les types de nombres.

  5. #4
    marco05

    Re : conversion

    voila je sois un nembre de 3 chiffres en ascii que je voudrai convertir en decimal

  6. #5
    PA5CAL

    Re : conversion

    Il faudrait quand même que tu précises ce que tu entends par « décimal ». J'ai fait l'hypothèse que tu parlais de code BCD qui, pour un seul chiffre ne pose pas de problème d'interprétation ni de conversion.

    En revanche, si tu souhaites convertir un nombre (de plusieurs chiffres, donc), les traitements nécessaires vont dépendre de la manière dont sont stockés ces chiffres BCD (codés sur 4 bits, je le rappelle, alors que les éléments traités par défaut par le langage C occupent un multiple de 8 bits).

  7. A voir en vidéo sur Futura
  8. #6
    Jack

    Re : conversion

    le plus simple est d'utiliser la fonction sscanf() qui permet entre autres de convertir directement une chaine en entier.

    A+

  9. Publicité
  10. #7
    PA5CAL

    Re : conversion

    Citation Envoyé par Jack Voir le message
    le plus simple est d'utiliser la fonction sscanf() qui permet entre autres de convertir directement une chaine en entier.
    sscanf() convertit une chaîne ASCII en une valeur binaire.

    Or, a priori c'est un code décimal qui est recherché ici.

  11. #8
    gienas

    Re : conversion

    Citation Envoyé par PA5CAL Voir le message
    ... Or, a priori c'est un code décimal qui est recherché ici.
    Tu as raison, mais du coup, je réalise que j'ai, moi aussi, proposé du binaire.

    Pourtant, je ne vois pas très bien, maintenant que tu nous "ouvres les yeux", ce que le décimal vient faire dans cette galère.

    Car enfin, l'ASCII, c'est bien du décimal.

    Je crois bien que pour progresser dans cette discussion, il est indispensable que marco05 nous dise clairement ce qu'il cherche.

    Edit: peut-être est-ce cela qu'il cherche: ayant une chaîne de 3 caractères ASCII, représentative du nombre, il veut le convertir en BCD.

    C'est donc comme tu l'as dit (ASCII - '0'), à faire caractère après caractère, et à "ranger" dans le même ordre, pour reconstituer la séquence des 3 caractères BCD.
    Dernière modification par gienas ; 13/11/2009 à 22h10.

  12. #9
    Jack

    Re : conversion

    sscanf() convertit une chaîne ASCII en une valeur binaire.

    Or, a priori c'est un code décimal qui est recherché ici.
    A ce moment là, tout est binaire dans l'ordi.

    Ce que je pense: on a une chaine constituée de chiffres:
    char nombreASCII[10]="123";
    int n;

    sscanf(nombreASCII,"%d",&n);
    printf("%d",n+1); // affiche 124

    nombreASCII est bien constitué de codes ASCII et n'a aucune valeur numérique.
    n est bien un nombre, puisque j'ai pu lui ajouter 1. Après, on peut l'afficher dans la base que l'on veut.

    A+

  13. #10
    PA5CAL

    Re : conversion

    Citation Envoyé par Jack Voir le message
    A ce moment là, tout est binaire dans l'ordi.

    Ce que je pense: on a une chaine constituée de chiffres:
    char nombreASCII[10]="123";
    int n;

    sscanf(nombreASCII,"%d",&n);
    printf("%d",n+1); // affiche 124

    nombreASCII est bien constitué de codes ASCII et n'a aucune valeur numérique.
    n est bien un nombre, puisque j'ai pu lui ajouter 1. Après, on peut l'afficher dans la base que l'on veut.

    A+
    Non, pas d'accord. Tu confonds codage et représentation d'une valeur. Le premier a une signification physique dans l'ordinateur, alors que la seconde n'est qu'un moyen permettant d'en parler, de l'écrire ou d'y penser.

    Sur un ordinateur, tout est codé en binaire, c'est-à-dire à l'aide de deux symboles, puisque la machine ne fonctionne qu'avec deux niveaux électriques (à l'exception de certains rares organes qui fonctionnent en fait sur un nombre plus importants de niveaux, mais qui sont tout de même exploités extérieurement en binaire). Pour autant, cela correspond rarement à un codage décimal.

    Dans ton exemple, sscanf() transforme la chaîne "123" en un entier sur 16 bits (ou 32 bits pour certains compilateurs) représentant la valeur 123. La mémoire correspondant à cet entier contient au final les bits :
    ¨¨¨¨ 0000000001111011
    (note que la représentation binaire que j'utilise ici correspondant directement à l'état physique des circuits électroniques).

    On peut représenter ce contenu par 123 en décimal, mais aussi 1111011 en binaire, 173 en octal, 7B en hexadécimal, ou encore 11120 en base 3. Mais il ne s'agit là que de représentation, pas de codage.

    Le codage suggère l'emploi d'un système de symboles représentatifs, dont le nombre est égal à dix dans le cas du codage décimal. Et comme on est sur un ordinateur, chacun de ces symboles est à son tour codé en binaire.

    Dans le cas présent, la valeur 123 n'est pas codée en décimal : dans la mémoire contenant l'entier, on ne peut pas retrouver les symboles codant le 1 des centaines, le 2 des dizaines et le 3 des unités. En fait, la valeur n'est pas codée dans un autre système que celui utilisé par défaut par l'ordinateur, c'est-à-dire le binaire.


    En revanche, comme l'indiquait gienas juste au dessus, on peut considérer que, pour les nombres entiers représentés en base 10, l'ASCII peut constituer un codage décimal. Les dix symboles utilisés sont :
    ¨¨¨¨ 00110000 ('0' ou 0x30)
    ¨¨¨¨ 00110001 ('1' ou 0x31)
    ¨¨¨¨ 00110010 ('2' ou 0x32)
    ¨¨¨¨ 00110011 ('3' ou 0x33)
    ¨¨¨¨ 00110100 ('4' ou 0x34)
    ¨¨¨¨ 00110101 ('5' ou 0x35)
    ¨¨¨¨ 00110110 ('6' ou 0x36)
    ¨¨¨¨ 00110111 ('7' ou 0x37)
    ¨¨¨¨ 00111000 ('8' ou 0x38)
    ¨¨¨¨ 00111001 ('9' ou 0x39)

    Ainsi la chaîne "123" est stockée en mémoire sous la forme :
    ¨¨¨¨ 00110001 00110010 00110011 00000000
    dans laquelle on retrouve bien distinctement les symboles représentatifs du 1, du 2 et du 3 (le dernier symbole n'est là que pour indiquer la fin de la chaîne, et n'a pas de signification dans le système de codage du nombre).


    J'ai quant à moi évoqué le codage décimal BCD, qui utilise les symboles suivants :
    ¨¨¨¨ 0000 (0)
    ¨¨¨¨ 0001 (1)
    ¨¨¨¨ 0010 (2)
    ¨¨¨¨ 0011 (3)
    ¨¨¨¨ 0100 (4)
    ¨¨¨¨ 0101 (5)
    ¨¨¨¨ 0110 (6)
    ¨¨¨¨ 0111 (7)
    ¨¨¨¨ 1000 (8)
    ¨¨¨¨ 1001 (9)

    Dans ce système de codage, la valeur 123 donnera :
    ¨¨¨¨ 0001 0010 0011
    qui pourra être stocké en mémoire dans un entier (int) sous la forme :
    ¨¨¨¨ 0000000100100011
    dans laquelle on retrouve toujours bien distinctement les symboles représentatifs du 1, du 2 et du 3.

    Mais on peut également envisager de la stocker dans trois caractères (char) sous la forme :
    ¨¨¨¨ 00000001 00000010 00000011

  14. #11
    Jack

    Re : conversion

    Belle démonstration PA5CAL, mais je n'ai aucun problème avec tout çà et je suis tout à fait d'accord avec ce que tu dis.

    En revanche marco05 (qui serait sympa d'intervenir rapidement) est peut-être un peu moins familier avec cette terminologie. Quand il parle de "code décimal", là où gienas et toi y voyez un code BCD, il me semble que marco05 peut simplement vouloir afficher un nombre en décimal.

    A+
    Dernière modification par Jack ; 14/11/2009 à 15h44. Motif: p'tite faute d'orthographe

  15. #12
    PA5CAL

    Re : conversion

    Citation Envoyé par Jack Voir le message
    Quand il parle de "code décimal", là où gienas et toi y voyez un code BCD, il me semble que marco05 peut simplement vouloir afficher un nombre en décimal.
    Oui, c'est très possible...

    Décimal ou pas, j'espère que mon laïus lui donnera quelques clés pour reformuler sa question.

    Il n'y a plus qu'à attendre qu'il repasse par ici.

  16. Publicité
  17. #13
    Jack

    Re : conversion

    C'est à se demander pourquoi on essaie d'aider quand on voit l'intérêt porté par certains participants

  18. #14
    PIXEL

    Re : conversion

    aucun !

    les forums sont considérés par certains comme un supermarché, jettent une question en "copié collé" sur un maximum de sites , prennent la premiére réponse et disparaissent.

    En gros un " faismesdevoirs.com" gratuit tenu par des bénévoles, dont beaucoup se lassent, et installent des forum privés (comme les groupes de discussions Yahoo)

  19. #15
    DAUDET78

    Re : conversion

    notre ami marco05 est passé hier

    Dernière activité: Hier 20h16
    donc il a lu la réponse #12 de PA5CAL .... et s'est sauvé comme un voleur !
    J'aime pas le Grec

Sur le même thème :

Discussions similaires

  1. Conversion de base : connaître le nième chiffre sans faire toute la conversion
    Par RVmappeurCS dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 02/07/2009, 20h14
  2. conversion
    Par sam13 dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 07/03/2009, 08h16
  3. Conversion
    Par iceberg974 dans le forum Physique
    Réponses: 3
    Dernier message: 28/01/2009, 22h58
  4. Conversion
    Par demain dans le forum Physique
    Réponses: 6
    Dernier message: 28/01/2009, 14h06
  5. Conversion DC/AC
    Par Nickyo dans le forum Électronique
    Réponses: 6
    Dernier message: 08/06/2005, 17h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.