My guess is that byte alignment is determined by the compiler settings. You have to make sure that these are always the same for each program that is using your files containing the serialized records. I tend to leave these settings alone.

The case statement inside a record doesn't actually add any complexity AFAIK. It only gives you different ways to adress exactly the same memory.