我有一个数组,我想将其转换为int32_t数组。
我尝试了下面的代码。
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++;
}
}
答案 0 :(得分:1)
最简单,最直接的方法是使用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
答案 1 :(得分:-1)
下面是我过去用于类似问题的解决方案。
#include <stdio.h>
#include <inttypes.h>
int main(){
int8_t input[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
int32_t output[10];
int count=0;
for(;count<sizeof(input);count+=sizeof(int32_t)/sizeof(int8_t)){
output[count] = (int32_t)(*(int32_t*)(&input[count]));
printf("%x:%x\n",input[count],output[count]);
}
return 0;
}
注意:正如@tadman在评论中指出的那样。您还需要考虑平台的字节顺序。该解决方案很好地解决了我在工作平台上的问题。根据您的平台,您可能需要进行调整。