字节数组中的字符串不';不要在C#中修剪?
我有一个与此类似的字节数组(16字节): 我使用此选项将其转换为字符串并修剪结尾空格:字节数组中的字符串不';不要在C#中修剪?,c#,arrays,string,byte,trim,C#,Arrays,String,Byte,Trim,我有一个与此类似的字节数组(16字节): 我使用此选项将其转换为字符串并修剪结尾空格: ASCIIEncoding.ASCII.GetString(data).Trim(); 我得到的字符串很好,但它仍然有所有的结束空格。 因此,我得到了类似于“qwerty………”(由于堆栈溢出,点是空格) 我做错了什么 我还尝试使用.TrimEnd()和UTF8编码,但它没有改变任何东西 提前感谢:)您必须执行TrimEnd(新字符[]{(字符)0})以修复此问题。这不是空格,而是经过奇怪转换的空字符。我也
ASCIIEncoding.ASCII.GetString(data).Trim();
我得到的字符串很好,但它仍然有所有的结束空格。
因此,我得到了类似于“qwerty………”
(由于堆栈溢出,点是空格)
我做错了什么
我还尝试使用.TrimEnd()和UTF8编码,但它没有改变任何东西
提前感谢:)您必须执行
TrimEnd(新字符[]{(字符)0})代码>以修复此问题。这不是空格,而是经过奇怪转换的空字符。我也有这个问题。它们不是真正的空间:
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
…应该这样做
-默认情况下,Oisin修剪,其中空格由char.IsWhitespace
定义
“\0”
是一个控制字符,而不是空白
可以使用重载指定要修剪的字符:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
为什么要先创建字符串,然后再修剪它?这可能会增加大量开销(如果字节[]较大) 您可以在
GetString(byte[]bytes,int index,int count)
重载中指定index
和count
int count=data.count(bt=>bt!=0);//找到第一个空值
字符串结果=Encoding.ASCII.GetString(数据,0,计数);//仅获取所需的字符
在powershell中,您可以执行以下操作:
$yourString.TrimEnd(0x00)
字节数组的结尾是00字节还是20字节?空格是0x20而不是0x00。如果字节数组来自MemoryStream,请确保调用
ToArray()
而不是GetBuffer()
,因为GetBuffer将包含“未填充”的数据,这会导致所有那些“\0”的字符串终止符与ASCII编码无关。似乎@Lazlo有一个固定大小的字节数组,其中包含一个可变长度的ASCII编码字符串,因此该字符串必须用空终止符填充以匹配数组大小(谢谢:)我以为是这样的,但不敢尝试。实际上,你可以只做。TrimEnd('\0')
@dtb你能再详细说明一下吗?为什么结果字符串应该与数组大小匹配?零不是ASCII字符,因此从逻辑上讲,这些字符应该被忽略,也就是说,应该被删除,并且字符串应该比数组短。
$yourString.TrimEnd(0x00)