Как преобразовать int [,] в байт [] в C#? Часть кода будут оцененыКак преобразовать int [,] в байт [] в C#
EDIT:
Мне нужна функция для выполнения следующих действий:
byte[] FuncName (int[,] Input)
Как преобразовать int [,] в байт [] в C#? Часть кода будут оцененыКак преобразовать int [,] в байт [] в C#
EDIT:
Мне нужна функция для выполнения следующих действий:
byte[] FuncName (int[,] Input)
Поскольку существует очень мало подробностей в вашем вопросе, я могу только догадываться, что вы пытаетесь сделать ... Предполагая, что вы хотите «Fla tten»2D-массив целых чисел в массив 1D байтов, вы можете сделать что-то подобное:
byte[] Flatten(int[,] input)
{
return input.Cast<int>().Select(i => (byte)i).ToArray();
}
Примечание вызов Cast
: это потому, что многомерные массивы реализовать IEnumerable
но не IEnumerable<T>
Казалось, что вы пишете типы неправильно, но вот то, что вы могли бы смотреть для:
byte[] FuncName (int[,] input)
{
byte[] byteArray = new byte[input.Length];
int idx = 0;
foreach (int v in input) {
byteArray[idx++] = (byte)v;
}
return byteArray;
}
Я бы предположил, что «скорее всего, станет его целью». –
Шахта быстрее! – mquander
@mquander true, но мой, похоже, соответствует его потребностям. –
В BitConverter новообращенные примитивные типы в байтовые массивы:
byte[] myByteArray = System.BitConverter.GetBytes(myInt);
Вам кажется, что требуется преобразовать 2-мерный массив ints в байты. Объедините битконвертер с необходимой конструкцией цикла (например, foreach) и любой логикой, которую вы хотите объединить размеры массива.
Реализация, предполагающая, что вы пытаетесь выполнить сериализацию; не знаю, если это то, что вы хотите; он префикрует размеры, затем каждая ячейка использует базовую кодировку:
public byte[] Encode(int[,] input)
{
int d0 = input.GetLength(0), d1 = input.GetLength(1);
byte[] raw = new byte[((d0 * d1) + 2) * 4];
Buffer.BlockCopy(BitConverter.GetBytes(d0), 0, raw, 0, 4);
Buffer.BlockCopy(BitConverter.GetBytes(d1), 0, raw, 4, 4);
int offset = 8;
for(int i0 = 0 ; i0 < d0 ; i0++)
for (int i1 = 0; i1 < d1; i1++)
{
Buffer.BlockCopy(BitConverter.GetBytes(input[i0,i1]), 0,
raw, offset, 4);
offset += 4;
}
return raw;
}
Это делает так мало смысла, что у меня болит голова. Вам нужно указать намного больше материала - гораздо больше, чем я даже не могу перечислить все это! Начнем с того, «Что такое проблема, которую вы пытаетесь решить?» –
несколько подробнее добавлен. – mouthpiec
Что означают '[,] int' и' [] byte'? Это не существует в C#, вы, вероятно, имеете в виду 'int [,]' и 'byte []' ... –