我有一个byte[]
,我想提取数组的一部分并将其转换为字符串。我想使用 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);