As far as The C Language Standard:
I think that is one of the worst failures of stewardship I in IT history.
It's 20 bloody 24 and we still cannot tell the C-compiler that we want this struct packed&padded a specific way and that the fields should be explicitly little- or big-endian, so that it matches the hardware specification or protocol format ?
But nooo, can't have that in C.
I guess nobody uses C-programs to exchange data outside their program ?
Ass-hats!