1)
Just by assigning the raw to its place, you get the "header view" for same data.
That is somewhat the whole point of unions.
2)
With memcpy you can do it to arbitrary structures, with union, you don't have to.
Code:
struct foo {
....
} bar;
unsigned char *data;
memcpy(&bar,data,sizeof(struct foo))