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 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    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