我被上面的问题困住了。
具有int8数组:

int8_t i8array[3];
i8array[0] = 10;
i8array[1] = 15;
i8array[2] = 100;

我不仅要转换,还要引用一个int16到i8array[1]。
所以我想要一个新的变量i16var,它是一个值为15如果我将i16var更改为3941,它应该将i8array的item#2从100更改为101。
ansi C有这个设施吗?我尝试过很多事情,甚至在这里,我也找到了在这些类型之间转换的答案。

最佳答案

对齐和结束符是关键问题。下面应该处理对齐问题,也许还有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

10-04 17:38