Преобразование int [] в байт [] в С#
Я знаю, как это сделать долгим путем: создав массив байтов нужного размера и используя for-loop, чтобы выкачать каждый элемент из массива int.
Мне было интересно, был ли более быстрый способ, так как кажется, что вышеописанный метод нарушится, если int
больше, чем sbyte
.
Ответы
Ответ 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();