Сериализация / транспонирование данных в C (ПОС 32)

голоса
0

Что является наиболее эффективным (самый быстрый) способ сериализации / транспозиции данные в этом несколько странным образом. Скажем, у меня есть 8 массива с некоторыми данными в них.

char Array0[10];
char Array1[10];
.............
char Array7[10];

I need to get an output array that will have:
Output[80];
Output.byte0.bit0 = Array0.byte0.bit0
Output.byte0.bit1 = Array1.byte0.bit0
Output.byte0.bit2 = Array2.byte0.bit0
Output.byte0.bit3 = Array3.byte0.bit0
.....................................
Output.byte0.bit7 = Array7.byte0.bit0

Output.byte1.bit0 = Array0.byte0.bit1
Output.byte1.bit1 = Array1.byte0.bit1
Output.byte1.bit2 = Array2.byte0.bit1
Output.byte1.bit3 = Array3.byte0.bit1
.....................................
Output.byte1.bit7 = Array7.byte0.bit1

В основном Бит0 выходного массива содержит преобразованные в последовательную форму данные входного Array0. Bit1 выходного массива содержит сериализованные данные входа Array1 и т.д. ...

Я использую микрочип PIC32 устройства, но это не имеет значения слишком много, это все еще стандарт C

Задан 20/10/2014 в 21:07
источник пользователем
На других языках...                            


1 ответов

голоса
0

Я не вижу, почему бы вам нужно сделать такую ​​вещь, но вы можете сделать это с помощью оператора сдвига.

Вы должны были бы создать матрицу для этих массивов:

char Array[N][M]

И сделать это так:

int i=0;
for ( int e = 0 ;  e < M ; e++ )  //~ e for element number
    for (int m = 0 ; m < 8 ; m++ )  //~ m for mask 
    {
        char aux=0;
        for (int a = 0 ; a < N ; a++ ) //~ a for array
        {
            char temp = Array[a][e] & (0x01 << m );
            temp >>= m;
            temp <<= a;
            aux |= temp;
        }
        output[i++]= aux;
    }

N должно быть 8 и 8 только.

Ответил 20/10/2014 в 21:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more