Domanda

Ho un array di byte simile a questo (16 byte):

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

Lo uso per convertirlo in una stringa e tagliare gli spazi finali:

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

Ottengo la stringa bene, tuttavia ha ancora tutti gli spazi finali. Quindi ottengo qualcosa come " qwerty .......... " (dove i punti sono spazi dovuti a StackOverflow).

Cosa sto sbagliando?

Ho anche provato a usare .TrimEnd () e ad usare una codifica UTF8, ma non cambia nulla.

Grazie in anticipo :)

È stato utile?

Soluzione

Devi fare TrimEnd (new char [] {(char) 0}); per risolvere questo problema. Non sono spazi - in realtà sono caratteri null che vengono convertiti in modo strano. Ho avuto anche questo problema.

Altri suggerimenti

Non sono davvero spazi:

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

... dovrebbe fare il trucco.

-Oisin

Taglia per impostazione predefinita rimuove solo gli spazi bianchi , dove gli spazi sono definiti da char.IsWhitespace .

'\ 0' è un carattere di controllo, non spazi bianchi.

Puoi specificare quali caratteri tagliare usando Trim (char [ ]) sovraccarico:

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

Perché provare a creare prima la stringa e tagliarla per seconda? Ciò potrebbe aggiungere un sacco di sovraccarico (se il byte [] è grande).

Puoi specificare indice e count nel GetString (byte [] byte, int index, int count) overload.

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

In PowerShell, puoi farlo:

$yourString.TrimEnd(0x00)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top