简体   繁体   中英

String from byte array doesn't get trimmed in C#?

I have a byte array similar to this (16 bytes):

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

I use this to convert it to a string and trim the ending spaces:

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

I get the string fine, however it still has all the ending spaces. So I get something like "qwerty.........." (where dots are spaces due to StackOverflow).

What am I doing wrong?

I also tried to use .TrimEnd() and to use an UTF8 encoding, but it doesn't change anything.

Thanks in advance :)

You have to do TrimEnd(new char[] { (char)0 }); to fix this. It's not spaces - it's actually null characters that are converted weirdly. I had this issue too.

They're not really spaces:

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

...should do the trick.

-Oisin

Trim by default removes only whitespace , where whitespace is defined by char.IsWhitespace .

'\\0' is a control character, not whitespace.

You can specify which characters to trim using the Trim(char[]) overload:

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

在powershell中,您可以这样做:

$yourString.TrimEnd(0x00)

Why try to create the string first and trim it second? This could add a lot of overhead (if the byte[] is large).

You can specify index and count in the GetString(byte[] bytes, 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM