我有一个byte[]
,我想提取一部分数组并将其转换为字符串。我想使用LINQ并在一行中完成。这是我能找到的最好的,但它让我失望。
String id = new String(payload.Skip(60).Take(92-60+1).ToString());
将有效负载[60]提取到有效负载[92]并将其转换为字符串。有没有更好的办法?我仍然在使用这种语法时遇到一些错误..
答案 0 :(得分:1)
不需要linq。 ASCIIEncoding.GetString
var str = Encoding.ASCII.GetString(payload, 60, 92-60+1);
答案 1 :(得分:0)
您可以尝试以下内容:
string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().ToArray())
答案 2 :(得分:0)
试试这个。
String id =Encoding.ASCII.GetString(payload.ToArray().Skip(60).Take(92-60+1).ToArray())
答案 3 :(得分:0)
假设使用UTF8编码的字符串,您可以像这样使用linq:
Encoding.UTF8.GetString(bytes.Skip(60).Take(32).ToArray());
这是一个更简单有效的解决方案:
Encoding.UTF8.GetString(bytes, 60, 32);
这样可以避免复制数组的部分,使用秒表进行快速检查会显示它快20倍。
答案 4 :(得分: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);