Вот скромный союз:
#include <stdio.h>
typedef struct {
unsigned char x, y, z, w;
} xyzw;
typedef union {
xyzw x;
unsigned int i;
} ixyzw;
unsigned int xyzw_to_i(ixyzw *p)
{
return p->i;
}
int main()
{
xyzw x = {1, 2, 3, 4};
printf("sizeof unsigned char %d\n", sizeof(unsigned char));
printf("sizeof unsigned int %d\n", sizeof(unsigned int));
printf("sizeof xyzw %d\n", sizeof(xyzw));
printf("sizeof ixyzw %d\n", sizeof(ixyzw));
printf("xyzw = { %d, %d, %d, %d }\n", x.x, x.y, x.z, x.w);
printf("i = 0x%08x\n", xyzw_to_i((ixyzw *) &x));
return 0;
}
, который на моей машине дает:
sizeof unsigned char 1
sizeof unsigned int 4
sizeof xyzw 4
sizeof ixyzw 4
xyzw = { 1, 2, 3, 4 }
i = 0x04030201
, но нельзя рассчитывать на это поведение на компиляторах или машинах.