I want to write my data into an array that is part of a union. Even though I can write to every element in the array, when I retrieve the value from the array in the union, I only get the value from the first element.
When I do the same thing but do not use an array, it works as expected.
Can anyone explain to me, why it does not work using an array or point out my error?
Thank you.
#include <stdio.h>
#include <stdint.h>
#include <string.h>
int main() {
struct struct_v1 {
unsigned a: 2;
signed b: 3;
};
union {
struct struct_v1 data[3];
uint16_t data_uint;
} union_v1;
memset(&union_v1.data_uint, 0, sizeof(union_v1.data_uint));
for (int i = 0; i < 3; ++i) {
union_v1.data[i].a = 1;
union_v1.data[i].b = -i;
}
struct struct_v2 {
unsigned a_0: 2;
signed b_0: 3;
unsigned a_1: 2;
signed b_1: 3;
unsigned a_2: 2;
signed b_2: 3;
};
union {
struct struct_v2 data;
uint16_t data_uint;
} union_v2;
memset(&union_v2.data_uint, 0, sizeof(union_v2.data_uint));
union_v2.data.a_0 = 1;
union_v2.data.b_0 = 0;
union_v2.data.a_1 = 1;
union_v2.data.b_1 = -1;
union_v2.data.a_2 = 1;
union_v2.data.b_2 = -2;
printf("union_v1 = 0x%04X\n", union_v1.data_uint); // 0x0001
printf("union_v2 = 0x%04X\n", union_v2.data_uint); // 0x67A1
return 0;
}