La stringa dall'array di byte non viene tagliata in C #?
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 :)
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)