来自字节数组的字符串不会在C#中被修剪?

Laz*_*zlo 22 c# arrays string byte trim

我有一个类似于此的字节数组(16字节):

71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

我用它来将它转换为字符串并修剪结束空格:

ASCIIEncoding.ASCII.GetString(data).Trim();
Run Code Online (Sandbox Code Playgroud)

我得到的字符串很好,但它仍然有所有结束空格.所以我得到类似的东西"qwerty.........."(由于StackOverflow,点是空格).

我究竟做错了什么?

我也尝试使用.TrimEnd()并使用UTF8编码,但它不会改变任何东西.

提前致谢 :)

Wal*_*t W 32

你必须要TrimEnd(new char[] { (char)0 });解决这个问题.它不是空格 - 它实际上是奇怪转换的空字符.我也有这个问题.

  • 实际上,你可以做`.TrimEnd('\ 0')`. (10认同)
  • null终止符与ASCII编码无关.似乎@Lazlo有一个固定大小的字节数组,它保存一个可变长度的ASCII编码字符串,因此字符串必须用空终止符填充以匹配数组大小 (7认同)

x0n*_*x0n 22

他们不是真正的空间:

System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
Run Code Online (Sandbox Code Playgroud)

......应该做的伎俩.

-Oisin


dtb*_*dtb 8

默认情况下修剪仅删除空白,其中定义了空格char.IsWhitespace.

'\0' 是一个控制字符,而不是空格.

您可以使用Trim(char[])重载指定要修剪的字符:

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