简体   繁体   中英

Ansi C int16_t reference to int8_t array

I'm stuck with the above problem. Having an int8_t array:

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

And I want to not just convert but also reference an int16_t onto i8array[1]. So I want a new variable i16var, which is an int16_t with the value of 15<<8+100 = 3940.

And if I change i16var to 3941, it should change i8array's item#2 from 100 to 101.

Does ansi C has this facility? I had tried many things, and even in here, I just found answers for converting between these types.

Alignment and endian are the key issues. The below should handle the alignment issue, and maybe the endian one. Good luck. Do not advise the coding approach.

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;
}

Output

3940
101

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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