22

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

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

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

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

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

我究竟做错了什么?

我还尝试使用 .TrimEnd() 并使用 UTF8 编码,但它并没有改变任何东西。

提前致谢 :)

4

5 回答 5

33

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

于 2009-09-09T23:14:02.763 回答
22

它们不是真正的空间:

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

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

-Oisin

于 2009-09-09T23:16:19.083 回答
8

默认情况下,Trim仅删除空格,其中空格由char.IsWhitespace.

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

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

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
于 2009-09-09T23:16:38.897 回答
1

为什么要先创建字符串然后再修剪它?这可能会增加很多开销(如果 byte[] 很大)。

您可以在重载中指定index和。countGetString(byte[] bytes, int index, int count)

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
于 2011-07-25T22:59:59.853 回答
0

在 powershell 中,您可以执行以下操作:

$yourString.TrimEnd(0x00)
于 2014-03-25T20:53:07.640 回答