4

「膨大な」量のデータがあり、50〜100メガバイトの間で変動する可能性があります。ファイルストリーマーを使用して、このデータをバイトの配列として読み込みました。

問題は、連続するすべての2バイトを整数に変換したいということです。これを行う方法は、ステップサイズが2のバイトの配列をループしてから、BitConvertを使用して変換を行うことです。

_data[i] = BitConverter.ToInt16(soundData[i : i + 2], 0) // Convert 2 bytes into an int and store at i

したがって、各2バイトはInt16に変換されます。ただし、問題はこれが遅すぎることです。約50メガバイトのファイルの場合、これには20秒かかる可能性があります。

データ配列の2バイトごとにこの関数を呼び出す代わりに、これを即座に実行する一般的な方法はありますか?できれば「安全な」方法で、安全でないコードは使用しないでください。

4

2 に答える 2

4

バイトの配列が正しいエンディアンにある場合は、Int16 配列を割り当てて Buffer.Block コピー (エア コード) を使用します。

byte[] b = new byte[]{1, 2, 3, 4};
short[] s = new short[2]; // 4 bytes long
Buffer.BlockCopy(b, 0, s, 0, 4);
于 2013-01-01T22:18:23.850 に答える
3

テストしないと、数学と「エンディアン」が正しいかどうかわかりませんが、他のオプションは次のようなものを試すことです。

// Convert 2 bytes into an int and store at i
_data[j] = (int)soundData[i] + (soundData[i + 1] << 8);

それも十分に速くない場合は、問題に対して別のアプローチが必要になる場合があります。

質問に対して他のいくつかのアイデアを見つけることができます: Convert Byte Array to Integer In VB.Net

于 2013-01-01T21:50:45.323 に答える