我有一个byte[]
,我想提取一部分数组并将其转换为字符串。我想要使用LINQ并在一行中完成。这是我能找到的最好的,但它让我失望了。LINQ获得子阵列
String id = new String(payload.Skip(60).Take(92-60+1).ToString());
将有效载荷[60]提取到有效载荷[92]并将其转换为字符串。有没有更好的办法?而我得到了一些错误,这个语法仍然..
我有一个byte[]
,我想提取一部分数组并将其转换为字符串。我想要使用LINQ并在一行中完成。这是我能找到的最好的,但它让我失望了。LINQ获得子阵列
String id = new String(payload.Skip(60).Take(92-60+1).ToString());
将有效载荷[60]提取到有效载荷[92]并将其转换为字符串。有没有更好的办法?而我得到了一些错误,这个语法仍然..
没有linq是必要的。 ASCIIEncoding.GetString
var str = Encoding.ASCII.GetString(payload, 60, 92-60+1);
你可以尝试类似如下:
string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().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倍。
首先,你应该使用一些编码到您的字节数组转换为字符串(在我看来这是安全的方式比较为字节数组字符串的方法),该编码取决于你的字节数组格式,你知道的更好。其次,因为你有一个数组,所以最好使用像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);
什么错误???? – CloudyMarble
可能的重复http://stackoverflow.com/questions/20797/how-to-split-a-byte-array – Sandeep
字节数组表示什么?你想如何转换为字符串?你能提供示例输入和输出吗? –