Question

J'ai un tableau d'octets semblable à celui-ci (16 octets):

71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00

Je l'utilise pour convertir une chaîne et couper les espaces finaux:

ASCIIEncoding.ASCII.GetString(data).Trim();

La chaîne est correcte, mais elle contient toujours tous les espaces finaux. Je reçois donc quelque chose comme "qwerty .........." (où les points sont des espaces dus à StackOverflow).

Qu'est-ce que je fais de travers?

J'ai aussi essayé d'utiliser .TrimEnd () et un encodage UTF8, mais cela ne change rien.

Merci d'avance :)

Était-ce utile?

La solution

Vous devez faire TrimEnd (new char [] {(char) 0}); pour résoudre ce problème. Ce ne sont pas des espaces - ce sont en fait des caractères nuls qui sont étrangement convertis. J'ai eu ce problème aussi.

Autres conseils

Ils ne sont pas vraiment des espaces:

System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')

... devrait faire l'affaire.

-Oisine

Couper par défaut supprime uniquement les espaces , les espaces étant définis par char.IsWhitespace .

'\ 0' est un caractère de contrôle, pas un espace.

Vous pouvez spécifier les caractères à supprimer à l'aide du Trim (char [ ]) surcharge:

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });

Pourquoi essayer de créer la chaîne en premier et de la couper en second? Cela pourrait ajouter beaucoup de temps (si l'octet [] est grand).

Vous pouvez spécifier index et count dans GetString (octet [] octets, int index, int count) surcharge.

int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want

Dans PowerShell, vous pouvez faire ceci:

$yourString.TrimEnd(0x00)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top