The elements of the struct are padded such that each starts at an address matching that element type's alignment. For more information on padding and alignment, see The Lost Art of Structure Packing . You can force a packed representation using #[repr(packed)]
Honestly, you shouldn't be touchingtransmute unless you understand what's really going on under the covers. Not only do you have the size wrong, you shouldn't ever transmute a non-#[repr(C/packed)]struct like that (...except for cases where it turns out to be OK). It's even endian-dependent, which can end up being a nasty surprise for someone down the road.
If you want to convert raw bytes into other values, you should probably look to the byteorder crate, which provide a safe interface for doing this.