Converting an int[] to byte[] in C#
I know how to do this the long way: by creating a byte array of the necessary size and using a for-loop to cast every element from the int array.
I was wondering if there was a faster way, as it seems that the method above would break if the int
was bigger than an sbyte
.
Solution 1:
If you want a bitwise copy, i.e. get 4 bytes out of one int, then use Buffer.BlockCopy
:
byte[] result = new byte[intArray.Length * sizeof(int)];
Buffer.BlockCopy(intArray, 0, result, 0, result.Length);
Don't use Array.Copy
, because it will try to convert and not just copy. See the remarks on the MSDN page for more info.
Solution 2:
Besides the accepted answer (which I am now using), an alternative one-liner for Linq lovers would be:
byte[] bytes = ints.SelectMany(BitConverter.GetBytes).ToArray();
I suppose, though, that it would be slower...