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

基本上输出 Array 的 Bit0 包含输入 Array0 的序列化数据。输出 Array 的 Bit1 包含输入 Array1 等的序列化数据...

我正在使用微芯片 PIC32 设备,但这无关紧要,它仍然是标准 C

4

1 回答 1

0

我不明白你为什么需要做这样的事情,但你可以使用 shift 运算符来做。

您需要为这些数组创建一个矩阵:

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。

于 2014-10-20T20:57:56.887 回答