Die Annahme, dass es sich bei einem int um einen 16Bit-Wert handelt,
gilt nicht für alle Plattformen, Compiler usw.. Leider wurde hierzu
keine Angabe gemacht.
Kommt es auf feste Größen der Datentypen an, sollte man entsprechende
Typen verwenden, wie sie der Compiler anbietet. Bei GCC o.ä. sind dies
z.B. uint8_t, uint16_t, uint32_t.
Ebenso darf man sich auch nicht darauf verlassen, dass Strukturen immer
dicht gepackt sind. Ggf. erfolgt ein Padding, insbesondere dann, wenn
nachfolgende Elemente eine größere Länge besitzen, so dass sie im
Speicher fehlausgerichtet wären.
Einigen Prozessoren (x86) macht es nicht aus, auf fehlausgerichtete
Daten zuzugreifen, wohingegen andere (ARM7/9) damit ganz massive
Probleme haben und (im besten Fall) eine Exception auslösen oder (im
schlechteren Fall) ungültige Daten lesen/schreiben.
Einige Compiler besitzen Dekoratoren wie z.B. "packed struct" oder
Pragmas, mit denen man das Padding unterdrücken kann, aber da sollte man
schon SEHR genau wissen, was man tut, insbesondere wenn das Programm aus
mehreren Modulen besteht, die anschließend gelinkt werden.