c - Ansi C int16_t 对 int8_t 数组的引用

标签 c ansi

我遇到了上述问题。 拥有一个 int8_t 数组:

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

我不仅要转换,还要将 int16_t 引用到 i8array[1] 上。 所以我想要一个新变量 i16var,它是一个值为 15<<8+100 = 3940 的 int16_t。

如果我将 i16var 更改为 3941,它应该将 i8array 的项目#2 从 100 更改为 101。

ansi C 有这个功能吗?我尝试了很多东西,即使在这里,我也只是找到了在这些类型之间进行转换的答案。

最佳答案

对齐和字节序是关键问题。下面应该处理对齐问题,也许还有字节序问题。祝你好运。不建议编码方式。

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

关于c - Ansi C int16_t 对 int8_t 数组的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794443/

相关文章:

c++ - 可移植地识别非标准 C++?

c - 函数 itoa 的隐式声明在 c99 中无效

c - 理解 C 中的 printf

c - 定义一些东西 ('w' << 8)

c - 最短 while 一次循环条件

MySQL 转储 .sql 脚本并导入到 apache derby

c - 段错误 C 和 Fortran

Ruby Rspec 在 Windows 上输出文字转义字符

c - 在字符串数组中搜索字符串

c - 函数中使用的 fopen 将文件地址包含在字符串中