来自字节数组的字符串不会在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 []指定要修剪的字符。 ])
重载:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
为什么要先尝试创建字符串然后再修剪它?这可能会增加很多开销(如果byte []很大)。
您可以在 GetString(byte [] bytes,int index,int count)
重载中指定 index
和 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
在powershell中,你可以这样做:
$yourString.TrimEnd(0x00)
不隶属于 StackOverflow