String aus dem Byte-Array nicht in C # getrimmt werden?
Frage
Ich habe ein Byte-Array ähnlich wie diese (16 Bytes):
71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00
Ich benutze diese in eine Zeichenfolge zu konvertieren und die Endung Leerzeichen trimmen:
ASCIIEncoding.ASCII.GetString(data).Trim();
Ich erhalte die Saite in Ordnung, aber es ist nach wie vor alle enden Räume hat.
So bekomme ich so etwas wie "qwerty.........."
(wo Punkte sind Räume aufgrund Stackoverflow).
Was mache ich falsch?
Ich habe auch versucht .TrimEnd () zu verwenden, und eine UTF8-Codierung zu verwenden, aber es ändert nichts.
Vielen Dank im Voraus:)
Lösung
Sie haben TrimEnd(new char[] { (char)0 });
zu tun, um dies zu beheben. Es ist nicht Räume - es ist tatsächlich Null-Zeichen, die weirdly umgewandelt werden. Auch ich hatte dieses Problem.
Andere Tipps
Sie sind nicht wirklich Plätze:
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
... sollte es tun.
-Oisin
Trim standardmäßig entfernt nur Leerzeichen , wo Leerzeichen ist definiert durch char.IsWhitespace
.
'\0'
ist ein Steuerzeichen, keine Leerzeichen.
Sie können festlegen, welche Zeichen trimmen die Trim(char[])
Überlastung:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
Warum versuchen die Zeichenfolge zuerst zu erstellen und zweiten trimmen? Dies könnte eine Menge Aufwand hinzufügen (wenn das byte [] ist groß).
Sie können index
und count
im GetString(byte[] bytes, int index, int count)
Überlastung angeben.
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, Sie können dies tun:
$yourString.TrimEnd(0x00)