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

Windows Forms Discussion :

[C# 2.0] Conversion hexadécimale dans un tableau de byte[]


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut [C# 2.0] Conversion hexadécimale dans un tableau de byte[]
    Bonjour.

    Je désire envoyer des trames via le protocole Modbus. J'ai donc fait 2 fonctions pour passer de la conversion hexa<==>caractère ASCII ou UNICODE et vice-versa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /// <summary>
    /// Convertit le champ data d'une trame modbus en chaîne de caractères.
    /// </summary>
    /// <param name="bData">Les données à convertir.</param>
    /// <returns>Une chaîne de caractères correctement formatée.</returns>
    public string convertTrameDataToString(byte[] bData)
    {
      return this.Encoding.GetString(bData, 0, bData.Length);
    }
    Pour cette première fonction, le tableau bData peut contenir des chiffres en décimal ou en hexa, cela me renverra toujours la bonne chaîne.
    Exemple: que bData contienne { 66, 111, 110, 106, 111, 117, 114, 46 } ou qu'il contienne ceci { 0x42, 0x6F, 0x6E, 0x6A, 0x6F, 0x75, 0x72, 0x2E }, la string renvoyée sera "Bonjour." donc cela est correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /// <summary>
    /// Convertit une chaîne de caractères en données exploitables par une trame modbus.
    /// </summary>
    /// <param name="sData">La chaîne de caractères à convertir.</param>
    /// <returns>Un tableau d'octets.</returns>
    public byte[] convertStringToTrameData(string sData)
    {
      return this.Encoding.GetBytes(sData);
    }
    Par contre, si je rentre en paramètre sData="Bonjour." mon tableau de byte[] contiendra uniquement les bons chiffres en décimal, à savoir { 66, 111, 110, 106, 111, 117, 114, 46 } or je voudrais qu'il contienne ses mêmes chiffres en hexadécimal.

    Merci d'avance à ceux qui pourront (ou qui essaieront) d'éclairer ma lanterne.

  2. #2
    Xno
    Xno est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 83
    Points
    83
    Par défaut
    Salut,

    Je ne comprend pas ton problème au niveau de ton tableau de bytes. Un tableau de bytes contient des valeurs de type byte. Après, tu peux visualiser les valeurs en décimal, hexadécimal ou binaire, comme tu veux.

    La notion de tableau de bytes avec des valeurs en décimal ou en hexadécimal n'existe pas car le système stocke les valeurs au format binaire.

    Dans le code suivant, les variables a et b contiennent la même valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      byte a = 0x42; // hexadécimal
      byte b = 66;    // décimal
    Maintenant, si tu veux afficher un tableau de byte en hexa, tu peux par exemple faire comme l'exemple suivant via un String.Format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      byte[] data = convertStringToTrameData("Bonjour.");
     
      string s = "";
      foreach (byte b in data)
      {
        s += String.Format("{0:x} ", b);
      }
     
      MessageBox.Show( s );

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Ok je pensais qu'il les envoyait au format hexa, mais s'il envoie en binaire alors pas de problème. Le fait qu'il me renvoie la valeur en décimal est normal alors, car si je rentre les valeurs en hexa dans mon tableau de byte[] en mode debug ca me les affiche quand même en décimal.

    Merci donc.

  4. #4
    Xno
    Xno est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 83
    Points
    83
    Par défaut
    Pas de pb.

    En mode debug, tu peux visualiser la valeur de tes variables en héxa.
    Par exemple, sur un point d'arrêt, fenêtre Locals, clic droit et choisir Hexadecimal display.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/02/2011, 02h07
  2. Réponses: 9
    Dernier message: 19/03/2007, 10h46
  3. Afficher une image stockée dans un tableau de bytes
    Par ValyGator dans le forum Windows
    Réponses: 2
    Dernier message: 07/01/2007, 22h52
  4. [Stream] Mettre le contenu d'un File dans un tableau de byte
    Par JohnBlatt dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 25/08/2006, 14h18
  5. Réponses: 4
    Dernier message: 26/01/2006, 14h37

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