You should never use bitfields in any external representation. This becomes external since you send the raw bytes where the bitfields are stored, over a serial line.
There's no way to know that the computer in the receiving end of hte serial line interprets your struct
the same way. It might have a different byte ordering, a different native integer size into which the bits are packed which might mean different padding, or whatever.
It's simply not portable.
You should do it in a more controlled fashion, perhaps by manually computing each byte of the desired external representation. This is called serialization, and it's a good thing.