繁体   English   中英

如何在C中将int8_t数组转换为int32_t数组

[英]How to convert an int8_t array to int32_t array in C

我有一个数组,我想将其转换为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++;
        }
    }

最简单,最直接的方法是使用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);

}

您可以在这里尝试代码

编辑:

我应该补充一点,这是可行的,因为分配任何一个数组所需的内存大小是相同的,并且如果您更改#define而不考虑这一点,就会遇到问题。

例如,

#define array_size_int32    10    //40 bytes
#define array_size_int8     45    //45 bytes

下面是我过去用于类似问题的解决方案。

#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在评论中指出的那样。 您还需要考虑平台的字节顺序。 该解决方案很好地解决了我在工作平台上的问题。 根据您的平台,您可能需要进行调整。

现场代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM