Подтвердить что ты не робот

Преобразование int [] в байт [] в С#

Я знаю, как это сделать долгим путем: создав массив байтов нужного размера и используя for-loop, чтобы выкачать каждый элемент из массива int.

Мне было интересно, был ли более быстрый способ, так как кажется, что вышеописанный метод нарушится, если int больше, чем sbyte.

4b9b3361

Ответ 1

Если вы хотите побитовое копирование, т.е. получите 4 байта из одного int, используйте Buffer.BlockCopy:

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

Не используйте Array.Copy, потому что он попытается конвертировать, а не просто копировать. См. Примечания на странице MSDN для получения дополнительной информации.

Ответ 2

Помимо принятого ответа (который я сейчас использую), альтернативный однострочный для любителей Linq будет:

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

Я полагаю, однако, что это будет медленнее...

Ответ 3

int[] ints = { 1, 2, 3, 4, 5, 6 };
byte[] bytes = ints.Select(x => (byte)x).ToArray();