Bug? dans la convertion byte[] -> String

Signaler
Messages postés
14
Date d'inscription
vendredi 2 novembre 2001
Statut
Membre
Dernière intervention
19 novembre 2003
-
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008
-
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

Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
Bon, elle est ou la question ? j'ai rien capter a ton post
Messages postés
14
Date d'inscription
vendredi 2 novembre 2001
Statut
Membre
Dernière intervention
19 novembre 2003

Quelque post avant celuila,
la c'est juste la soluce que j'ai trouvé
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

Sinon tu utilises

String MaString = BitConverter.toString(MaChaine);