web-dev-qa-db-ja.com

C#でint []をbyte []に​​変換する

私はこれを長い間行う方法を知っています:必要なサイズのバイト配列を作成し、forループを使用してint配列からすべての要素をキャストします。

intsbyteよりも大きい場合、上記の方法は壊れると思われるため、より高速な方法があるかどうか疑問に思っていました。

40
soandos

ビット単位のコピーが必要な場合、つまり1つのintから4バイトを取得する場合は、 Buffer.BlockCopy を使用します。

byte[] result = new byte[intArray.Length * sizeof(int)];
Buffer.BlockCopy(intArray, 0, result, 0, result.Length);

Array.Copy は使用しないでください。コピーするだけでなく、変換しようとするからです。詳細については、MSDNページの備考を参照してください。

85
Daniel Hilgarth

受け入れられている回答(現在使用している)に加えて、Linqの愛好家向けの代替ワンライナーは次のようになります。

byte[] bytes = ints.SelectMany(BitConverter.GetBytes).ToArray(); 

しかし、私はそれが遅くなると思う...

5
heltonbiker