我有一个数组,我想把它转换成一个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