2014-10-20 8 views
0

이 다소 이상한 방식으로 데이터를 serialize/transpose하는 가장 효율적인 (가장 빠른) 방법은 무엇입니까? 배열에 데이터가있는 8 개의 배열이 있다고 가정 해 보겠습니다.C에서 데이터 직렬화/변환 (PIC 32)

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 

기본적으로 출력 배열의 Bit0에는 입력 Array0의 일련 화 된 데이터가 들어 있습니다. 출력 배열의 비트 1은 내가 마이크로 칩의 PIC32 장치를 사용하고

... 등을하는 array1 입력의 직렬화 된 데이터를 포함하고 있지만이 문제에 너무 많은, 그것은 여전히 ​​표준 C

+0

명확성을 위해, 주어진 단일 출력 옥텟의 ** 모든 ** 비트가 켜지거나 지워지려고 했습니까? 귀하의 샘플은 이것을 제안하지만 귀하의 설명에 약간 안개가 낀 것으로 보입니다. – WhozCraig

+0

예, 이해가 잘 된 경우. 출력의 Byte0에는 8 개의 입력 배열 모두의 Byte0.Bit0이 포함됩니다. 출력의 Byte1에는 8 개의 모든 입력 배열의 Byte0.Bit1이 포함됩니다. 등등 .. 출력의 바이트 8에는 모든 8 개의 입력 배열의 Byte1.Bit0이 포함됩니다. 이것이 의미가 있습니까? – Borisw37

답변

0

I 돈입니다 안 왜 그런 일을해야하는지 알겠지만 시프트 연산자를 사용하여 할 수 있습니다.

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 만해야한다.