Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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# LINQ获取子数组_C#_Linq_Substring - Fatal编程技术网

C# LINQ获取子数组

C# LINQ获取子数组,c#,linq,substring,C#,Linq,Substring,我有一个字节[],我想提取数组的一部分并将其转换为字符串。我想使用LINQ并在一行中完成它。这是我能找到的最好的,但我失败了 String id = new String(payload.Skip(60).Take(92-60+1).ToString()); 将有效负载[60]提取为有效负载[92],并将其转换为字符串。有更好的办法吗?这个语法仍然有一些错误。您可以尝试以下方法: string.Concat((object[])payload.Skip(60).Take(92-60+1).Ca

我有一个
字节[]
,我想提取数组的一部分并将其转换为字符串。我想使用LINQ并在一行中完成它。这是我能找到的最好的,但我失败了

String id = new String(payload.Skip(60).Take(92-60+1).ToString());

将有效负载[60]提取为有效负载[92],并将其转换为字符串。有更好的办法吗?这个语法仍然有一些错误。

您可以尝试以下方法:

string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().ToArray())
string.Concat((object[])payload.Skip(60.Take(92-60+1.Cast().ToArray())

您可以尝试以下方法:

string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().ToArray())
string.Concat((object[])payload.Skip(60.Take(92-60+1.Cast().ToArray())
试试这个

String id =Encoding.ASCII.GetString(payload.ToArray().Skip(60).Take(92-60+1).ToArray())
试试这个

String id =Encoding.ASCII.GetString(payload.ToArray().Skip(60).Take(92-60+1).ToArray())

假设是UTF8编码的字符串,可以使用linq,如下所示:

Encoding.UTF8.GetString(bytes.Skip(60).Take(32).ToArray());
一个更直接、更高效的解决方案是:

Encoding.UTF8.GetString(bytes, 60, 32);

这避免了复制数组的部分,使用秒表快速检查显示速度快了20倍。

假设使用UTF8编码的字符串,您可以像这样使用linq:

Encoding.UTF8.GetString(bytes.Skip(60).Take(32).ToArray());
一个更直接、更高效的解决方案是:

Encoding.UTF8.GetString(bytes, 60, 32);
这避免了复制阵列的部分,使用秒表快速检查显示速度快了20倍。

无需linq

不需要linq


首先,您应该使用一些编码来将字节数组转换为字符串(在我看来,与字节数组转换为字符串的其他方法相比,这是一种安全的方法),这种编码取决于您的字节数组格式,并且您更了解它

第二,因为你有一个数组,最好使用内置的数组函数,比如,因为这比linq快,而且你不需要遍历数组的92个元素,你只需要遍历33个元素

var secondArray = new byte[92-60+1];
Array.Copy(payLoad, 60, secondArray, 0, 92-60+1);
UTF8Encoding encoding = new UTF8Encoding();
string result = encodin.GetString(secondArray);

首先,您应该使用一些编码来将字节数组转换为字符串(在我看来,与字节数组转换为字符串的其他方法相比,这是一种安全的方法),这种编码取决于您的字节数组格式,并且您更了解它

第二,因为你有一个数组,最好使用内置的数组函数,比如,因为这比linq快,而且你不需要遍历数组的92个元素,你只需要遍历33个元素

var secondArray = new byte[92-60+1];
Array.Copy(payLoad, 60, secondArray, 0, 92-60+1);
UTF8Encoding encoding = new UTF8Encoding();
string result = encodin.GetString(secondArray);

字节数组表示的内容可能重复?您希望如何将其转换为字符串?你能提供输入和输出的例子吗?我假设这个人真的想把字节转换回字符串-就像在
Encoding.GetString(byte[])
中那样,字节数组代表的可能是重复的?您希望如何将其转换为字符串?你能提供输入和输出的例子吗?我假设这个人真的想把字节转换回字符串-就像在
Encoding.GetString(byte[])