And removing sizeof() will solve exactly which part of the problem? I'm sure you mean the right thing, but sizeof() itself is not a culprit in this case - the struct itself holds 16 bit and 32 bit data intermixed in ways that cause the compiler to add padding - in the middle of the struct. So alignment is very much the issue here.
--
Mats