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

我有一个类似于此的字节数组(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编码,但它不会改变任何东西。

提前致谢 :)

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

他们不是真正的空间:

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

……应该做的伎俩。

-Oisin

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

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

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

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

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

您可以在GetString(byte[] bytes, int index, int count)重载中指定indexcount

 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 

在powershell中,您可以这样做:

 $yourString.TrimEnd(0x00)