Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字节数组中的字符串不';不要在C#中修剪?_C#_Arrays_String_Byte_Trim - Fatal编程技术网

字节数组中的字符串不';不要在C#中修剪?

字节数组中的字符串不';不要在C#中修剪?,c#,arrays,string,byte,trim,C#,Arrays,String,Byte,Trim,我有一个与此类似的字节数组(16字节): 我使用此选项将其转换为字符串并修剪结尾空格: ASCIIEncoding.ASCII.GetString(data).Trim(); 我得到的字符串很好,但它仍然有所有的结束空格。 因此,我得到了类似于“qwerty………”(由于堆栈溢出,点是空格) 我做错了什么 我还尝试使用.TrimEnd()和UTF8编码,但它没有改变任何东西 提前感谢:)您必须执行TrimEnd(新字符[]{(字符)0})以修复此问题。这不是空格,而是经过奇怪转换的空字符。我也

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

我使用此选项将其转换为字符串并修剪结尾空格:

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)