我遇到了上述问题。 有一个int8_t数组:
int8_t i8array[3];
i8array[0] = 10;
i8array[1] = 15;
i8array[2] = 100;
我想要的不仅仅是转换,还要将一个int16_t引用到i8array [1]上。 所以我想要一个新变量i16var,它是一个int16_t,其值为15 <&lt;&lt; 8 + 100 = 3940.
如果我将i16var改为3941,它应该将i8array的第2项从100改为101。
ansi C有这个设施吗?我尝试了很多东西,即使在这里,我也找到了在这些类型之间进行转换的答案。
答案 0 :(得分:1)
对齐和结束是关键问题。下面应该处理对齐问题,也许是endian问题。祝好运。不要建议编码方法。
int main(void) {
union {
struct {
int8_t dummy;
int8_t i8array[3];
} view1;
struct {
int16_t dummy;
int16_t i16var;
} view2;
} u;
u.view1.i8array[0] = 10;
u.view1.i8array[1] = 15;
u.view1.i8array[2] = 100;
printf("%d\n", htons(u.view2.i16var));
u.view2.i16var = htons(3941);
printf("%d\n", u.view1.i8array[2]);
return 0;
}
输出
3940
101