Bug? dans la convertion byte[] -> String

cs_welc Messages postés 14 Date d'inscription vendredi 2 novembre 2001 Statut Membre Dernière intervention 19 novembre 2003 - 17 nov. 2003 à 22:26
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008 - 25 avril 2008 à 12:31
Hello,

Suite à mon dernier messge, j'ai enfin trouvé tous seule la solution à mon probléme.
Je dis bug, mais je suis loin d'avoir le niveau de juger si c'est un bug ou pas.

Dans tous les cas j'expose mon probléme avec la solution, au cas ou d'autre personne on le même prob.

-----

Quand vous faite appel à des API windows, il arrive que certaine fonction, dans leur argument renvoit une adresse dune chaîne de caractére codé sur un octet (jme tompe ?). Par exemple :
SHGetPathFromIDList de l'api windows.

Donc si c'est codé sur un octet, déclarons un tableau de byte. Ici l'api SHGetPathFromIDList nous indique que le talbeau renvoyé sera de 260 entités.

byte[] MaChaine = new byte[260]

Une fois les donnés récupéré, dans MaChaine[], vous allez vouloir surement convertir en String :

String MaString = System.Text.Encoding.Default.GetString(MaChaine);

Et là arrive une chose des plus étranges.

Si vous faite par exemple afficher le contenu de la string dans une TextBox, ce la marche parfaitement.
Si vous essayé de l'afficher en console cela marche super aussi :

// On va dire que MaChaine = "c:\toto"
// Convertie en String, cela donne logiquement MaString="c:\toto"

WriteLine(MaString);

Cela renvoit chez moi :
c:\totoLe programme '[3720] UnProg.exe' s'est arrêté avec le code 0 (0x0).

Super cool, ça marche bien tous ça !
Et pourtant si vous faite MaString.Length, cela donne 260.
String.Length = "Nombre de caractères dans cette instance."

Vous me direz, car la fin est remplit d'espace, mais mon exemple de sortie en console montre bien le contraire.

En faite c'est les foutu caractéres "null" qui était dans le byte qui mette la chianlit.

Pour remédier à cela, il faut convertire ainsi :
String MaString = System.Text.Encoding.Default.GetString(MaChaine)..TrimEnd((char)0);

3 réponses

gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 13
19 nov. 2003 à 00:21
Bon, elle est ou la question ? j'ai rien capter a ton post
0
cs_welc Messages postés 14 Date d'inscription vendredi 2 novembre 2001 Statut Membre Dernière intervention 19 novembre 2003
19 nov. 2003 à 00:29
Quelque post avant celuila,
la c'est juste la soluce que j'ai trouvé
0
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
25 avril 2008 à 12:31
Sinon tu utilises

String MaString = BitConverter.toString(MaChaine);
0
Rejoignez-nous