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:)

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top