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

时间:2009-09-09 23:11:10

标签: c# arrays string byte trim

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

提前致谢:)

5 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:22)

他们不是真正的空间:

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

......应该这样做。

-Oisin

答案 2 :(得分:7)

默认情况下修剪removes only whitespace,其中空格由char.IsWhitespace定义。

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

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

在powershell中,你可以这样做:

$yourString.TrimEnd(0x00)