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++Builder Discussion :

Convertir DECIMAL ou HEXA en ASCII


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut Convertir DECIMAL ou HEXA en ASCII
    Bonjour,

    Je cherche un moyen pour convertir un nombre décimal ou héxadécimal en ASCII .
    Je reçois via le port usb une trame contenant, par exemple, 0x69 --> 'E';
    Lorsque je veut l'afficher dans un Memo celui-ci m'affiche la valeur décimal :
    Memo1->Lines->Add(receive_buf[2]);
    Alors que je voudrais qu'il m'affiche 'E' tout simplement.

    Merci pour vos réponses,
    Cdt

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    J'ai tester cette fonction mais elle me semble assez bizarre ....

    Code C++ : 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
     AnsiString HEX2ASCII(AnsiString HEX)
    {
       int nbchar = HEX.Length() / 2;
       AnsiString ASCII = AnsiString::StringOfChar(' ',nbchar);
       AnsiString ASCII = AnsiString::StringOfChar(' ',HEX.Length() / 2);
       try
       {
          for (int i = 1 ; i <= nbchar ; i++)
          {
             AnsiString sHex = HEX.SubString(2*i-1,2);
             unsigned char c = StrToInt("0x" + sHex);
             ASCII[i] = c;
          }
       }
       catch (EConvertError &e)
       {
          ASCII= "";
       }
       return ASCII;
    }
    Si je lui entre la valeur 69 il me sort un 'i' Il doit y avoir un décalage....

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    Excusez moi j'avais fais une erreur....

    Cdt

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    J'ai quand même une autre question...
    Dans les cas ou l'on dispose d'un entier pour le convertir en Ascii de qu'elle maniere doit-on procéder ?

    LMerci

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Je crois qu'il existe une commande IntToStr.

    En passant, quant tu mets du code utilise la balise CODE, c'est le bouton # dans la barre d'outils.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    Je vais essayer sa ...
    Et excuse moi de ne pas avoir mis de balise...
    ++

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    Le problème reste le même avec IntToStr...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        AnsiString ASCII = HEX2ASCII(IntToStr(76));
        Memo1->Lines->Add(ASCII);
    La valeur 76 correspond à 'L'...Or j'ai encore 76 dans mon mémo...

    Meric pour vos réponses...

  9. #9
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Essai:
    IntToHex
    ou
    StrToHex

    Tu sais, si tu appuie sur F1 dans BCB, l'aide va venir à toi

  10. #10
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Excuse moi pour le dernier post, j'ai relu ta question et ma réponse n'a pas rapport!

    Se que tu cherches à faire dans le fond c'est convertir un char en AnsiString.

    J'ai trouver une solution dans le post http://www.developpez.net/forums/showthread.php?t=26812 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AnsiString A;
    char c=76;
    char *pc=&c;
    A=IntToStr((unsigned char)*pc);
    Memo1->Lines->Add(A);

  11. #11
    Membre confirmé Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Par défaut
    Salut

    pour du hexa vers du decimal en hyper rapide (c'est excellent pour du tps réel : DSP / micro controleur) et ... sans division : http://www.baghli.com/hex2dec.php

    tu veux afficher en ascii ensuite il suffit d'ajouter 0x30 à un uint8 ! ou pour les chars hexa > 0x0F ajoute 0x37

    voir aussi, si tu as de la division ds ton arsenal de calcul (un PENTIUM), un code plus simple (exemple d'envoi sur un ecran LCD, mais ça marche pareil que pour toi : en fait j'ecris ds un buffer OutData ou... puis tu le mets ds ton AnsiString :
    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
    50
    51
    52
    53
    54
    55
    // Sendfs sends the IRcode (Data & Addy) information on the uart at 19200 baud
    void SendIRcode()
    {
    unsigned int k;
    unsigned char c;
    // Codage ASCII de la donnée  
     k = IR_CodeData;
     c = k/10;
     if (c > 0)
      k = k - c*10;
     OutData[OffsetIRCodeData] = (c + 0x30);
     OutData[OffsetIRCodeData+1] = (char)(k + 0x30);
     k = IR_CodeAddy;  //format à revoir ....
     c = k/10;
     if (c > 0)
      k = k - c*10;
     OutData[OffsetIRCodeAddy] = (c + 0x30);
     OutData[OffsetIRCodeAddy+1] = (char)(k + 0x30);
     TXPtr = &OutData[0];
     SendMsg();
    }
    //------------------------------------------------------------------------
    // Sendfs sends the theta information on the uart at 19200 baud
    void Sendthetacode()
    {
    unsigned int k;
    unsigned char c;
    // Codage ASCII de la donnée hexa
     k = theta;
     c=k & 0x000F;
     if (c<=9) c+=0x30;
      else  c+=0x37;
     OutTheta[Offsettheta+3]=c;
     c=k>>4 & 0x000F;
     if (c<=9) c+=0x30;
      else  c+=0x37;
     OutTheta[Offsettheta+2]=c;
     c=k>>8 & 0x000F;
     if (c<=9) c+=0x30;
      else  c+=0x37;
     OutTheta[Offsettheta+1]=c;
     c=k>>12 & 0x000F;
     if (c<=9) c+=0x30;
      else  c+=0x37;
     OutTheta[Offsettheta]=c;
    // codage ASCII de l heure
     OutTheta[OffsetTime]=  (heure2 + 0x30);
     OutTheta[OffsetTime+1]=(heure1 + 0x30);
     OutTheta[OffsetTime+3]=(min2 + 0x30);
     OutTheta[OffsetTime+4]=(min1 + 0x30);
     OutTheta[OffsetTime+6]=(sec2 + 0x30);
     OutTheta[OffsetTime+7]=(sec1 + 0x30);
     TXPtr = &OutTheta[0];
     SendMsg();
    }

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 417
    Par défaut
    Salut !

    Au plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = (char)receive_buf[2];
    Memo1->Lines->Add((AnsiString)c);
    A plus !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Par défaut
    Merci à tous pour toutes vos réponses....

    C'est incroyable ce que l'on peut perdre comme temps avec les problèmes de types, de conversions....

    Encore merci à bientôt

  14. #14
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Si tout fonctionne clique sur

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2015, 10h22
  2. convertir decimal en hexa
    Par defjones dans le forum C++
    Réponses: 14
    Dernier message: 26/02/2015, 17h51
  3. Probléme pour convertir decimal en hexa
    Par vtk37 dans le forum Débuter
    Réponses: 7
    Dernier message: 19/05/2009, 14h00
  4. Réponses: 21
    Dernier message: 30/03/2009, 00h00
  5. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 16h05

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