簡體   English   中英

LINQ獲得子陣列

[英]LINQ to get sub-array

我有一個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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM