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 un texte de 8 caractères en 4 octets BCD


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut Convertir un texte de 8 caractères en 4 octets BCD
    Bonjour,

    Dans un Tedit, je saisis un texte de 8 caractères.

    Je souhaite que ces 8 caractères soient repris dans 4 octets en tant que paires de caractères définissant 4 octets en hexadecimal. Les caractères saisis doivent donc etre compris entre 0 et F.

    Un exemple sera je pense la meilleure des explications :

    Je tapes "12345678" dans le Tedit
    je souhaite obtenir 4 octets (4 chars contenus dans un tableau par exemple) qui ont pour valeurs :
    0x12
    0x34
    0x56
    et 0x78

    "A12B143E" donnerait :
    0xA1
    0x2B
    0x14
    et 0x3E

    J'ai cherché dans les conversions de format mais je m'en sors pas

    Merci par avance

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    voilà un bout de code pour convertir ta chaîne en ce que tu souhaites:
    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
     
         if(Edit2->Text != "")//Edit 2 contient la chaine en hexa
         {
    //conversion hexadecimale --> decimale
             std::string Hex = Edit2->Text.c_str();
             std::istringstream iss( Hex );
             iss >> std::hex >> x;
             Edit1->Text = IntToStr(x);//Edit1 contient la chaine en decéimale
     
    //conversion hexadecimale --> binaire
             std::bitset<24> b2( StrToInt(Edit1->Text) );
             std::ostringstream oss;
             oss << b2;
             std::string s2 = oss.str();  // s2 = "01001011"
             Edit3->Text = s2.c_str();//Edit3 contient la chaine en binaire
         }
         else
         {
             Edit1->Text = "";
             Edit3->Text = "";
         }
    En éspérant que cela puisse t'aider

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut petitours.
    Tu peu essayer ce bout de code.
    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
     
    // ne pas oublier d'inclure
    // #include "StrUtils.hpp"
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    String a;
    String b;
    String c;
     
    a = MidStr("123456", 1, 2);
    a = "0x" + a;
    b = MidStr("123456", 3, 2);
    b = "0x" + b;
    c = MidStr("123456", 5, 2);
    c = "0x" + c;
    }

  4. #4
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut manquerait il qu'une conversion hexa->binaire ?
    Merci pour vos reponses

    je n'arrive pas à comprendre le fonctionnement de la proposition de bandit boy

    Pour celle de blondelle je comprend et j'arrive à faire fonctionner l'exemple
    mais je ne cherche pas à obtenir du texte "0x1a" je cherche à obtenir un octet de valeur 0x1a !

    Dans l'exemple "12345678" je souhaite obtenir un octet contenant 0x12, 0x34, 0x56 et 0x78 soit 18,52,86 et 120 en décimal !
    Je ne cherche pas à obtenir 4 textes contenant la representation hexa des valeurs.

    Le MidStr me fait approcher du but malgré tout, merci !
    Je me dis que HexToBin peut me sortir d'affaire mais j'obtiens toujours 1
    avec des essais pourtant simples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char donnees[3] = "0a" ;
    char resultat[4] ;
     
    HexToBin(donnees,resultat,4);
     
    Label5->Caption = IntToStr(resultat) ;
    j'obtiens toujours 1...

    Merci

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut petitours.
    Est ce que quelque chose comme cela t'irait.
    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
     
    // ne pas oublier d'inclure
    // #include "StrUtils.hpp"
    // #include "SysUtils.hpp"
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    String a;
    String b;
    String c;
     
    a = MidStr(123456, 1, 2);
    a = IntToHex(StrToInt(a),2);
     
    b = MidStr("123456", 3, 2);
    b = IntToHex(StrToInt(b),2);
     
    c = MidStr("123456", 5, 2);
    c = IntToHex(StrToInt(c),2);
    }

  6. #6
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    non

    je me suis encore mal fait comprendre

    avec ce code, "123456" me donne 0C,22 et 38
    ces trois resultats sont lla conversion entier vers hexadecimal de 12,34 et 56.

    Moi c'est pratiquement l'inverse qu'il me faut.

    Le "123456" serait en fait une ecriture hexa de ce que je cherche ecrit sur 3 octets.
    le premier octet contient 0x12 (soit 18 en decimal)
    le second octet contient 0x34 (soit 52 en decimal)
    le troisieme octet contient 0x56 (soit 86 en decimal)
    "123456" est bien la visualisation hexa des 3 octets mis cote à cote

    il me faut trouver comment obtenir les valeurs 18,52 et 86 à partir du texte "123456"

    Merci

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

Discussions similaires

  1. [MS-DOS] Une commande DOS pour convertir un texte en OEM
    Par Furius dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 30/12/2005, 19h47
  2. Réponses: 4
    Dernier message: 29/12/2005, 17h51
  3. convertir le text de DBedit vers PAnsiChar ?
    Par _alex_ dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2005, 14h44
  4. Convertir un texte en OEM avec Notepad++
    Par Furius dans le forum Autres Logiciels
    Réponses: 17
    Dernier message: 17/10/2005, 13h18
  5. Mode texte 80*50 caractères
    Par lorenfar dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/05/2005, 15h08

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