It seems that there’s a mistake in MAVlink SET_MODE message description (or complementary error in Mission Planner and Ardupilot implementation). Custom_mode and target_system are swapped.
http://mavlink.org/messages/common#SET_MODE
How are they swapped? target_system says The system setting the mode, which I can see as being ambiguous but not wrong, and base_mode says The new base mode which is correct.
Sorry. custom_mode and target_system swapped.
I investigated a crash and decoded messages manually and found that actual custom_mode is transmitted in target_system field. Then I checked a code and found that it works this way. I’m about byte sequence in message payload
Packets are packed in size order. 32bit elements are packed before 8 bit. The description is not wrong you are inferring the order from the documentation which isn’t the truth.
As Bill said you are seeing the field reordering, read here: http://qgroundcontrol.org/mavlink/crc_extra_calculation
Thanks for explanation.