bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 2019
-
5 juin 2008 à 16:08
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 2019
-
6 juin 2008 à 11:29
Salut,
Je souhaite convertir un tableau de Byte vers en String.
J'avais commencé par écrire :
Dim sTChar
As
String = vbNullString
For i
As
Integer = 0
To UBound(ArrBFile) sTChar += Chr(ArrBFile(i))
Next i
Ce code fonctionne très bien mais devient vite très très lent avec de grands tableaux.
Après quelques recherches j'ai lu que l'on pouvait utiliser la class System.Text.Encoding
Après plusieurs essais (UTF7, ASCII, Unicode...), j'ai obtenu le meilleur résultat avec :
Dim
sTChar
As
String = System.Text.Encoding.UTF7.GetString(ArrBFile)
Le problème est que sTChar ressort avec la bonne longueur (celle du tableau) mais seuls les 4 premiers caractères sont remplis. Les autres sont vides (espaces ??).
Il est important pour moi d'obtenir exactement le même résultat qu'avec la boucle et la fonction Chr
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 5 juin 2008 à 16:53
Ok je comprend, merci pour le renseignement.
Sinon as tu une piste pour supprimer tous ces null de manière efficace ?
car si je passe par une boucle je crains que niveau performance cela ne soit 0 pointé.
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 5 juin 2008 à 18:35
Bouv> Salut,
Ne change rien à ta conversion (enfin si utilise .ASCII) quand meme.
Ce n'est pas parce que tu ne vois pas tous les caractéres de sTchar, qu'ils n'y sont pas.
Il te suffit de faire apres ton .Getstring un Stchar=stchar.replace(chr(0),"?") ou ce que tu veux pour remplacer les [0]
@+
Megafan
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 5 juin 2008 à 20:45
Salut,
Le souci est que dans ton tableau tu as des bytes à 0, or il est impossible d'afficher une chaine qui contient un 0, l'affichage de la chaine s'arrete à ce caractére.
Donc, utilise la fonction replace pour remplacer les bytes à 0 par un caractére 'affichable', un espace, un point ce que tu veux....
UTF7<---> ASCII
Je pense qu'il a d'autres caractéres non affichable dans ton tableau (bytes de 0 à 31) et il faut donc aussi que tu les
remplacent tous par un caractére affichable.
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 6 juin 2008 à 00:10
Salut,
Je ne pense pas que cela soit une bonne idée. L'objectif n'est pas d'afficher la chaine mais qu'elle ai un contenu le plus fidèle possible à mon tableau de byte (qui lui contient une image JPG).
Cela dit j'ai une autre idée. Sachant que je remplit mon tableau de Byte depuis un MemoryStream (MyStream.ToArray)
Est-il possible, dans un deuxième temps d'obtenir cette chaine depuis le MemoryStream ?