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# Discussion :

Problème de conversion byte en hexa


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut Problème de conversion byte en hexa
    Bonjour

    Actuellement sur un petit projet, je dois construire une trame pour communiquer en RS232.
    Mon problème est lorsque que mon byte à une valeur = 128, si ma valeur est < 128 ou > 128 pas de problème. c'est juste la valeur 128 qui me poste un problème (je recois 3F)

    Mon code :
    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
    private void bp_EnvoiTrame_Click(object sender, EventArgs e)
            {
                Byte AdresseMode = 128; 
                Byte LongueurTrame = 6;
     
               recu = Convert.ToString(Convert.ToChar(AdresseMode)) + Convert.ToString(Convert.ToChar(LongueurTrame));
                serialPort1.Encoding = System.Text.Encoding.Default;
                serialPort1.BaudRate = 19200;
                serialPort1.PortName = "COM11";
                serialPort1.Open();
                serialPort1.WriteLine(recu) ;
                serialPort1.Close();
     
           }

    merci pour votre aide

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     byte b = 128;
          MessageBox.Show(Convert.ToString(b,16));

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Merci ppphil

    mais ce que je veux c'est envoyer le caractère ASCII de 128 en décimal ou 80 en hexa soit en VB chr(128)

  4. #4
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Rien compris...
    tu peux me dessiner ce que tu veux en sortie ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    ppphil

    Si je code cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Byte AdresseMode = 128; 
     
                recu = Convert.ToString(AdresseMode,16);
                serialPort1.Encoding = System.Text.Encoding.Default;
                serialPort1.BaudRate = 19200;
                serialPort1.PortName = "COM11";
                serialPort1.Open();
                serialPort1.Write(recu) ;
                serialPort1.Close();
    je recoi 2 caractères de ma liaison série : le caractère 8 (38 hex) et 30 (30 hex)

    ce que je veux recevoir c'est le caractère correspondant à la valeur 80 hexa

    merci

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = "38";
          byte b = Convert.ToByte(s, 16);
          MessageBox.Show(((char)b).ToString());

  7. #7
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Byte AdresseMode = 129; 
    recu = Convert.ToString(Convert.ToChar(AdresseMode));
                serialPort1.Encoding = System.Text.Encoding.Default;
                serialPort1.BaudRate = 19200;
                serialPort1.PortName = "COM11";
                serialPort1.Open();
                serialPort1.Write(recu);
                serialPort1.Close();
    fonctionne car je recois un seul caractère de valeur 81 hexa

    le problème est quand j'envoi AdresseMode = 128

    Tous ce que ppphil me donne fonctionne avec un message box mais pas en transmission de donnée avec SerialPort.write.

  8. #8
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Un nouvel essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Byte AdresseMode = 127; 
                Byte LongueurTrame = 128;
                Byte Rez = 129;
     
                recu = Convert.ToString(Convert.ToChar(AdresseMode)) + Convert.ToString(Convert.ToChar(LongueurTrame)) + Convert.ToString(Convert.ToChar(Rez));
                serialPort1.Encoding = System.Text.Encoding.Default;
               // serialPort1.Encoding = System.Text.Encoding.Unicode;
                serialPort1.BaudRate = 19200;
                serialPort1.PortName = "COM11";
                serialPort1.Open();
                serialPort1.Write(recu);
                serialPort1.Close();
    Sous Docklight j'espionne la liaison série et constat :
    System.Text.Encoding = Unicode

    je recoi : 7F 00 80 00 81 00

    et avec System.Text.Encoding = Default
    je recoi 7F 3F 81

    Peut être une piste (je creuse !!!!)

  9. #9
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Pourrais-tu me montrer ce que tu dois avoir dans la variable recu ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Dans ma variable recu (en mode debug) j'ai :
    "€"
    mes 3 caractères que je dois envoyer.
    En VB cela devrait être chr(127)chr(128)chr(129)

    ce ne sont pas les caractères qui me sont nessécaire mais la valeur hexa, car mon interface décode les valeurs hexa recu pour en extraire par exemple pour la commande 80 hexa ==> 1000 0000 (b) 10 = 2 pour 2 octets à recevoir et les 6 autres bits pour commander des sorties. Le protocole est imposé et figé.

    ne pense tu pas que le problème vient de l'Encoding?

    merci pour ton temps ppphil

  11. #11
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Dans ma variable recu (en mode debug) j'ai :
    "€"
    Et tu voudrais y trouver quoi ??? 7F8081 ou autre chose...
    C'est cela que je n'arrive pas à comprendre...

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Par défaut les String sont unicode (ce qui signifie qu'il prennent plus de place qu'un octet). Il faut que tu transformes ta chaine de caractères en un tableau de char:
    Encoding.ASCII.GetBytes(myString)

Discussions similaires

  1. Problème de conversion de char en byte
    Par Gouyon dans le forum Langage
    Réponses: 4
    Dernier message: 22/09/2012, 19h15
  2. Problème de conversion 2 bytes en Integer
    Par MustOne dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2009, 10h17
  3. [C#] Problème de conversion de byte[]
    Par LE NEINDRE dans le forum C#
    Réponses: 1
    Dernier message: 14/12/2006, 10h33
  4. Conversion String en Hexa ("1F") vers byte
    Par ducseb dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2006, 20h03
  5. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37

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