Как преобразовать int [,] в byte [] в C # - PullRequest
0 голосов
/ 24 июля 2010

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

EDIT:

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

byte[] FuncName (int[,] Input)

Ответы [ 4 ]

3 голосов
/ 24 июля 2010

Поскольку в вашем вопросе очень мало деталей, я могу только догадываться, что вы пытаетесь сделать ... Предполагая, что вы хотите "сгладить" двумерный массив целых в одномерный массив байтов, вы можете сделать вот так:

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

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

3 голосов
/ 24 июля 2010

Кажется, что вы пишете неправильно, но вот что вы искали:

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

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

    return byteArray;
}
2 голосов
/ 24 июля 2010

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

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;
}
1 голос
/ 24 июля 2010

BitConverter преобразует типы примитивов в байтовые массивы:

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

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

...