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 :

Charger un string dans un tableau de byte [Débutant]


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 1 956
    Points : 2 075
    Points
    2 075
    Par défaut Charger un string dans un tableau de byte
    Bonjour

    Je cherche à rentrer un string contenu dans un textbox dans un tableau de byte.

    En fouinant j'ai trouvé ToCharArray();

    et ca donne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Char[] CharArray = textBx_NomVoie1.Text.ToCharArray();
    OutBuffer[i++] = (byte)CharArray[0];
    OutBuffer[i++] = (byte)CharArray[1];
    ...
    OutBuffer[i++] = (byte)CharArray[10];
    Ca fonctionne mais existe t-il une solution plus efficace ou radicale pour faire cela ?

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    Tu devrais regarder du coté des classes dérivé de "Encoding" (AsciiEncoding, UTF8Encoding, ...)
    Ces classes exposent la methode GetBytes qui devrai répondre a ton besoin.
    Et si tu as besoin de recopier la tableau dans un autre Buffer.BlockCopy fera l'affaire.

    PS : ton code exemple me surprend un peu, tu conais les boucles?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int i = 0; i < CharArray.Length; ++i)
    {
       OutBuffer[i] =(byte)CharArray[i];
    }

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 1 956
    Points : 2 075
    Points
    2 075
    Par défaut
    Bonjour et merci

    J'ai déjà utilisé la méthode getByte pour des float
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] byteArray = BitConverter.GetBytes(nombreFloat);
    mais justement je n'ai pas trouvé comment l'utiliser avec un string.

    Quoi mettre à la place du "BitConverter" que j'ai d'ailleurs aujourd'hui du mal à nommer. La recherche dans MSDN n'est pas encore facile pour moi.

    Mon exemple ci dessus avec ToCharArray(); me pose par ailleurs un soucis que j'aurais surement également avec GetBytes : Si le texteBox contient une chaine de 6 caractères, le tableau de char "CharArray" n'aura qu'une taille de 6, meme si je le déclare ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Char[] CharArray;
    CharArray = new char[8];
    or il me faut toujours avoir 8 bytes à placer dans mon tableau de byte...

    Merci

    PS : Je connais les boucles mais mon origine mécano fait qu'il est encore plus lisible pour moi d'écrire sans la boucle ! Si si... je me force régulièrement à reprendre mon code pour remplacer mes pavés par des boucles. C'est comme de lire en hexa, je ne m'y ferai jamais !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ca n'a pas de sens de faire comme ça (convertir chaque char en byte)
    Un caractère en .NET fait 2 octets, donc ton truc va marcher pour les caractères inférieurs à 256, mais après ça va te donner n'importe quoi

    Pour convertir un chaine en tableau d'octets, il faut déjà savoir dans quel encodage tu travailles. Par exemple, si c'est ASCII, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] bytes = Encoding.ASCII.GetBytes(textBx_NomVoie1.Text);

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 1 956
    Points : 2 075
    Points
    2 075
    Par défaut
    Merci

    avec cet exemple j'ai compris d'où sort ce que l'on met devant le GetBytes !

    c'est plus propre comme ca.

    Maintenant me reste mon deuxième problème

    si j'ai une chaine de 6 caractères dans mon textebox, je vais avoir le tableau "Bytes" qui aura seulement une taille de 6 dans cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    byte[] bytes = Encoding.ASCII.GetBytes(textBx_NomVoie1.Text);
    int tutu = bytes.Length;
    for (int d = 0; d < 8; ++d)
    {
                    OutBuffer[i++] = bytes[d];
    }
    alors que j'ai besoin de transférer 8 bytes, peut importe ce qui est saisi.

    c'est idem si je déclare la taille de mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    byte[] bytes;
    bytes = new byte[8];
    bytes = Encoding.ASCII.GetBytes(textBx_NomVoie1.Text);
    int tutu = bytes.Length;
    for (int d = 0; d < 8; ++d)
    {
                    OutBuffer[i++] = bytes[d];
    }

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    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 : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Pour le coup, c'est plus simple de jouer sur le contenu du string que sur la taille du tableau... Tronquer la chaine (Substring) ou Padder (PadRight) serait plus simple.

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 1 956
    Points : 2 075
    Points
    2 075
    Par défaut
    ca tourne nickel avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    textBx_NomVoie1.Text = textBx_NomVoie1.Text.PadRight(8);
    byte[] bytes = Encoding.ASCII.GetBytes(textBx_NomVoie1.Text);
    for (int d = 0; d < 8; ++d)
    {
    OutBuffer[i++] = bytes[d];
    }
    Merci beaucoup
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Rajoute des caractères nuls au début de la chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s = textBx_NomVoie1.Text.PadLeft(8, '\0');
    byte[] bytes = Encoding.ASCII.GetBytes(s);
    (en .NET un caractère nul ne marque pas la fin de la chaine)

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tout compte fait, le PadLeft c'est un peu du bricolage... On peut aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte[] asciiBytes = Encoding.ASCII.GetBytes(textBx_NomVoie1.Text);
    byte[] bytes = new byte[8];
    Array.Copy(asciiBytes, 0, bytes, bytes.Length - asciiBytes.Length, asciiBytes.Length);

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

Discussions similaires

  1. Servlet devant charger une image dans un tableau de byte
    Par mumu27 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 19/01/2010, 11h30
  2. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59
  3. [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
  4. Un string dans un tableau de deux dimensions...
    Par FinalSpirit dans le forum C++
    Réponses: 5
    Dernier message: 15/01/2006, 14h29
  5. [HTML] Charger une page dans un tableau? Possible?
    Par mec.nimois dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/10/2005, 11h32

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