我有一个数组,我想把它转换成一个int32数组。
我试过下面的代码。

int32_t const_data[11];
int8_t buffer[44];

    int k = 0;
    while (k < 11) {
        for (int j = 0; j < 44; j++) {
                const_data[k] = bf.buffer[j];
                k++;
        }
    }

最佳答案

最简单和最直接的方法是使用union

#define array_size_int32    11
#define array_size_int8     44

typedef union{
    int32_t const_data[array_size_int32];
    int8_t buffer[array_size_int8];
}my_union_t;

示例用法:
/* initialize union members */
my_union_t my_union = {
    .const_data = {
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
        0x12345678,
    },
};

打印示例:
uint8_t i;

for(i = 0; i < array_size_int8; i++){

    /* mask off sign extension bits */
    printf("my_union.buffer[%d] = %x\n", i, my_union.buffer[i] & 0xff);

}

你可以试试代码here
编辑
我要补充的是,这是因为分配任意一个数组所需的内存大小是相同的,如果不考虑这一点而更改#define,就会出现问题。
例如,
#define array_size_int32    10    //40 bytes
#define array_size_int8     45    //45 bytes

09-25 17:45