2010-07-23 2 views
-2

Как преобразовать int [,] в байт [] в C#? Часть кода будут оцененыКак преобразовать int [,] в байт [] в C#

EDIT:

Мне нужна функция для выполнения следующих действий:

byte[] FuncName (int[,] Input) 
+3

Это делает так мало смысла, что у меня болит голова. Вам нужно указать намного больше материала - гораздо больше, чем я даже не могу перечислить все это! Начнем с того, «Что такое проблема, которую вы пытаетесь решить?» –

+0

несколько подробнее добавлен. – mouthpiec

+0

Что означают '[,] int' и' [] byte'? Это не существует в C#, вы, вероятно, имеете в виду 'int [,]' и 'byte []' ... –

ответ

3

Поскольку существует очень мало подробностей в вашем вопросе, я могу только догадываться, что вы пытаетесь сделать ... Предполагая, что вы хотите «Fla tten»2D-массив целых чисел в массив 1D байтов, вы можете сделать что-то подобное:

byte[] Flatten(int[,] input) 
{ 
    return input.Cast<int>().Select(i => (byte)i).ToArray(); 
} 

Примечание вызов Cast: это потому, что многомерные массивы реализовать IEnumerable но не IEnumerable<T>

3

Казалось, что вы пишете типы неправильно, но вот то, что вы могли бы смотреть для:

byte[] FuncName (int[,] input) 
{ 
    byte[] byteArray = new byte[input.Length]; 

    int idx = 0; 
    foreach (int v in input) { 
     byteArray[idx++] = (byte)v; 
    } 

    return byteArray; 
} 
+1

Я бы предположил, что «скорее всего, станет его целью». –

+1

Шахта быстрее! – mquander

+0

@mquander true, но мой, похоже, соответствует его потребностям. –

1

В BitConverter новообращенные примитивные типы в байтовые массивы:

byte[] myByteArray = System.BitConverter.GetBytes(myInt); 

Вам кажется, что требуется преобразовать 2-мерный массив ints в байты. Объедините битконвертер с необходимой конструкцией цикла (например, foreach) и любой логикой, которую вы хотите объединить размеры массива.

2

Реализация, предполагающая, что вы пытаетесь выполнить сериализацию; не знаю, если это то, что вы хотите; он префикрует размеры, затем каждая ячейка использует базовую кодировку:

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; 
} 
Смежные вопросы