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 :

Travail avec les int8


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 4
    Par d�faut Travail avec les int8
    Bonjour,
    Je travaille sur une application communicant par RS232, et donc sur des variable de type __int8.
    Mon probl�me est que, lors du d�bogage, ces avariables apparaissent sous forme de caract�re ce qui n'est vraiement gu�re pratique.
    J'utilise donc souvent l'inspecteur pour voir la valeur num�rique de la variable, et l�, j'obtient soit quelque chose du genre 0x56, ce qui est correct, soit 0xFFFFFF56, ce qui l'est moins ...

    De plus lors d'une comparaison if (toto== 0x56), le if me retourne false lorsque toto=0xFFFFFF56

    J'ai essay� les toto= titi & 0xFF ou toto=static_cast<__int8>titi mais rien n'y fait.
    est-ce que quelqu'un aurait une explication et surtout ... une solution

  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
    Bonjour,
    J'ai aussi travaill� sur une liaison type RS232. Tu recoit des octets, donc des "char" � partir de �a, tu peux convertir ton octet comme tu le d�sires pour ton traitement.
    Je ne sais si tu utilises le composant ComPortRx ou si tu fais une API windows, mais dans les deux cas, tu as ca:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AnsiString reception;
    ComPort1->ReadStr(reception,*Count); //lecture du portCom
    for(i=1;i<=*Count;i++)        //buffer pour le traitement
    {
       //       Memo1->Lines->Add(IntToStr((unsigned char)reception[i]));     //affichage de l octet
              recu[Count_recu]=(unsigned char)reception[i];                 //sauvegarde dans le buffer
              if(++Count_recu>DIM_RECU) Count_recu=0;
    }
    pour le composant ou ca:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DWORD Count;
    char Str[1024];
     
    if(ReadFile(comHandle, Str, 1024, &Count, 0)==true)
    {
    //traitement
    }
    else
    {
    //erreur de lecture
    }
    Si �a peux t'aider

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 4
    Par d�faut
    Merci pour ta r�ponse,
    En fait j'utilise le composant TComPort dans le cadre d'un protocole personnel impl�ment� pour une liaison domotique de type ModBus.
    J'ai donc cr�e une classe Messagerie impl�menant un TComPort et je suis oblig� de g�rer le protocole de mani�re tr�s "serr�e": j'emet un octet, je controle que c'est bien cet octet qui a �t� �mis (CMS/DA), le g�re les ACKNOLEDGE, etc ... dans le cadre d'un s�quenceur.
    J'ai donc besoin d�mettre et recevoir des octet, pas des chaines (je g�re aussi le timing entre deux octets) et de comparer chaque octet re�u � certaine valeurs attendue par le protocole.
    D'o� mon soucis.
    L'utilisation de "unsigned char" pourrait peut �tre r�soudre mon probl�me sauf que
    - comment comparer un unsigned char a une valeur de type 0xFF sans faire des acrobaties de conversion IntToStr peu �l�gantes
    - comment faire en sorte que le debugger (en passant la souris sur la variable) m'affiche bien une valeur int (nota: ce dernier point n'est qu'une clause de confort, moins important que le premier point)

  4. #4
    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
    Pour ta comparaison, tu peux faire de la mani�re suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    if( (int)toto == 0xFF)
    {
        //traitement
    }
    Tu cast ton octet pour lui faire comprendre que c'est un entier. Pour le compilateur, une valeur enti�re est convertie en hexa (en interne) pour que le microprocesseur accepte le code hexa g�n�r� par ton compilateur, cela ne pose donc pas de probl�me pour la comparaison entier/hexadeciale.

    Pour ton autre question, tu peux voir ta variable �voluer en la s�lectionnant et en faisont Ctrl+F5, on en allant dans Run->Add Watch dans Builder. A partir de l�, une fen�tre s'ouvre te permettant d'ajouter un point de suivit t'indiquant � chaque pas la valeur de la variable suivie. Tu peux configurer ce point de suivie pour t'afficher cette variable en entier, hexad�cimale, caract�re... suivant ton choix. Par d�faut la valeur de la variable est affich�e en fonction de sa d�claration.
    Voil�, j'esp�re que j'ai r�pondu � ta question, sinon je reste dispo
    Bon courage

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 4
    Par d�faut
    Bonjour,
    J'ai essay� de travailler avec des unsigned char au lieu des __int8 en definissant un type perso par typedef.
    C'est alors que je me suis apper�u (le compilateur plutot) que ce type existait d�ja: c'est le type "byte".
    J'ai donc transform� toutes mes d�claration __int8 en byte et cela fonctionne parfaitement.

    J'ai aussi utilis� la fen�tre watch que j'utilisait peu, et c'est vrai que c'est rudement pratique.

    Merci pour tes judicieuses r�ponses

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 02/09/2006, 01h23
  2. R�ponses: 2
    Dernier message: 22/06/2006, 11h03
  3. travailler avec les images et les vecteurs
    Par susimido dans le forum SQL Proc�dural
    R�ponses: 1
    Dernier message: 24/04/2006, 15h02
  4. R�ponses: 8
    Dernier message: 22/11/2005, 07h29

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