2

byte[]あり、配列の一部を抽出して文字列に変換したいと考えています。LINQ を使用して 1 行で実行したい。これは私が見つけることができる最高のものでしたが、失敗しました。

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

ペイロード[60]からペイロード[92]を抽出し、文字列に変換します。より良い方法はありますか?そして、私はまだこの構文でいくつかのエラーが発生しています..

4

5 に答える 5

1

linq は必要ありません。ASCIIEncoding.GetString

var str = Encoding.ASCII.GetString(payload, 60, 92-60+1);
于 2012-11-05T09:10:21.620 に答える
0

次のようなことを試すことができます:

string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().ToArray())
于 2012-11-05T08:58:32.600 に答える
0

これを試して。

String id =Encoding.ASCII.GetString(payload.ToArray().Skip(60).Take(92-60+1).ToArray())
于 2012-11-05T08:59:06.267 に答える
0

UTF8でエンコードされた文字列を想定すると、次のようにlinqを使用できます。

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

より簡単で効率的な解決策は次のとおりです。

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

これにより、アレイのセクションのコピーが回避され、ストップウォッチで簡単にチェックすると、20倍高速であることがわかります。

于 2012-11-05T08:59:56.930 に答える
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);
于 2012-11-05T09:15:56.753 に答える