2012-11-05 48 views
1

我有一个byte[],我想提取一部分数组并将其转换为字符串。我想要使​​用LINQ并在一行中完成。这是我能找到的最好的,但它让我失望了。LINQ获得子阵列

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

将有效载荷[60]提取到有效载荷[92]并将其转换为字符串。有没有更好的办法?而我得到了一些错误,这个语法仍然..

+0

什么错误???? – CloudyMarble

+0

可能的重复http://stackoverflow.com/questions/20797/how-to-split-a-byte-array – Sandeep

+0

字节数组表示什么?你想如何转换为字符串?你能提供示例输入和输出吗? –

回答

0

你可以尝试类似如下:

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

试试这个。

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

假设UTF8编码字符串,你可以使用LINQ像这样:

Encoding.UTF8.GetString(bytes.Skip(60).Take(32).ToArray()); 

更直接和有效的解决方案是这样的:

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

这避免了抄袭的部分阵列,并用秒表快速检查显示它快20倍。

0

首先,你应该使用一些编码到您的字节数组转换为字符串(在我看来这是安全的方式比较为字节数组字符串的方法),该编码取决于你的字节数组格式,你知道的更好。其次,因为你有一个数组,所以最好使用像Array.Copy这样的内置数组函数,因为它比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);