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 :

transformation string en byte[]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut transformation string en byte[]
    Bonjour à tous,

    J'ai besoin d'aide sur le point suivant.
    Je veux communiquer avec un appareil pour le reconfigurer.
    La liaison se fait par port série et je dispose d'un fichier texte contenant les trames à envoyer.

    J'arrive bien à être en liaison avec l'appareil, pour ceci il n'y a pas de problèmes.
    Dans le fichier texte, les trames sont de la façon suivante :

    "105C8000B504851035C0FF0005DC32C203438245F0"

    J'ouvre donc le fichier, etc ... j'obtiens bien la trame en string...

    Il faudrait maintenant que je la convertisse en byte[] pour obtenir la forme suivant dans mon code :

    byte[] trame_a_envoyer;
    trame_a_envoyer = new byte[] { 0x10, 0x5C, 0x80, 0x00, 0xB5, 0x04, 0x85, 0x10, ................ , 0xF0};

    port.Write(trame_a_envoyer, 0, trame_a_envoyer.lenght);

    Et c'est là que je bloque...

    Merci énormément de votre aide

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Il faut utiliser la classe Encoding que tu souhaites utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string unicodeString = "Bonjour, je suis une chaîne unicode sur développez.com";
     
          Encoding unicode = Encoding.Unicode;
     
          // Convert the string into a byte array.
          byte[] unicodeBytes = unicode.GetBytes(unicodeString);
    C'est tout Bon dév.

  3. #3
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Je crois que j'ai pas très bien compris ton besoin, ce serait pas plutôt quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private List<byte> ConvertToByteArray(string chaine)
            {
                int quotient, reste;
                quotient = Math.DivRem(chaine.Length, 2, out reste);
                List<byte> tab = new List<byte>();
                for (int i = 0; i < chaine.Length - reste; i += 2)
                {
                    tab.Add(byte.Parse(chaine.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));
                }
                if (reste != 0)
                    tab.Add(byte.Parse(chaine.Substring(chaine.Length - 1), System.Globalization.NumberStyles.HexNumber));
                return tab;
            }

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut
    Ta deuxième réponse me parait le meilleure, mais :

    Je voudrais qu'une chaine, par exemple "105C8000B5" en string,
    devienne un tableau de byte comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    byte[] trame_a_envoyer;
    trame_a_envoyer[0] = 0x10; // hex correspondant aux 2 premiers caractères de ma chaine
    trame_a_envoyer[1] = 0x5C; // hex correspondant aux 2 suivants 
    trame_a_envoyer[2] = 0x80; // ainsi de suite
    trame_a_envoyer[3] = 0x00;
    trame_a_envoyer[4] = 0xB5;
    Le but étant de ne pas récrire au clavier toutes les trames...

    Merci

  5. #5
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    C'est ce que fais le deuxième bout de code que je t'ai posté. La seule chose qui t'échappe, c'est que dans visual studio, les byte sont affiché en décimal par défaut, et non en hexadecimal.

    Donc tu devrais obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    byte[] trame_a_envoyer;
    trame_a_envoyer[0] = 0x10; // 16
    trame_a_envoyer[1] = 0x5C; // 92
    trame_a_envoyer[2] = 0x80; // 128
    trame_a_envoyer[3] = 0x00; // 00
    trame_a_envoyer[4] = 0xB5; // 181
    N'est-ce pas le cas? Je te propose de bien revoir le code que je t'ai fourni et ensuite revenir vers moi si tu ne comprends pas quelque chose.

Discussions similaires

  1. String vers byte[]
    Par EpOnYmE187 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2011, 11h23
  2. [Debutant]Transformer string en int
    Par htaou dans le forum SL & STL
    Réponses: 7
    Dernier message: 09/09/2005, 21h28
  3. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10
  4. transformer string en numerique
    Par chrys76 dans le forum ASP
    Réponses: 14
    Dernier message: 05/12/2003, 13h27

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