Рассмотрим следующий код:
struct test1str
{
int testintstr : 2;
int testintstr2 : 1;
};
struct test2str
{
int testintstr : 2;
int testintstr2 : 1;
};
union test1uni
{
int testint1;
test1str str1;
};
union test2uni
{
int testint2;
test2str str2;
};
struct finalstruct
{
test1uni union1;
test2uni union2;
} finstr;
int* ptr = &finstr.union1.testint1;
finstr.union1.testint1 = 2;
finstr.union2.testint2 = 4;
cout << &finstr.union1 << endl;
cout << &finstr.union2 << endl;
printf("val: %i addr: %x\n", *ptr, ptr);
ptr++;
printf("val: %i addr: %x\n", *ptr, ptr);
Есть ли более подходящий способ доступа к значениям из объединений внутри примера finalstruct?Используя код из приведенного выше примера, я мог бы перебрать все объединения внутри "finalstruct" и получить int, который был необходим, но есть ли другой способ сделать это?
Предположим, что размер данных из всех структур будет меньшеили равный размеру переменной внутри объединения - структуры будут обрабатываться как битовые поля, а данные будут считываться через переменную объединения.
Это будет использоваться только на процессорах одного типа, скомпилированных с одним компилятором (gcc)и размеры всех структур и союзов будут одинаковыми (кроме окончательной конструкции, конечно).Я пытаюсь добиться того, чтобы можно было легко изменять разные биты с помощью struct (test1str, test2str), и для чтения мне нужно знать только то, какое окончательное значение получат эти биты - для этого я буду использовать union(test1uni, test2uni).Упаковав эти союзы в struct (finalstruct), я могу легко обработать все данные.