If your structure represents a hardware layout, then you can force the sizes of components of the structure using the predefined types from stdint.h (such as uint16_t etc), or by using the ':n' notation, eg
unsigned int foo:16;
Both the packing and alignment can be set using the packed
attributes as demonstrated in the above posts.
However, you should be careful of such controlled structures; they are seldom portable (such as when moving between little endian to big endian architectures), and often represent a failure to serialize data. The best reason for packing structures is to conserve space (usually at the expense of speed), not to force a consistent byte format.