memcpy for struct working strange

struct T644HeaderRecord {
  uint8_t head; // head 0xFF
  uint64_t serial_number;
  uint8_t cmd; // | 0x80; // cmd
  uint16_t tx_bytes; // count of data
};

code:

memset(out_bytes, 0, sizeof(out_bytes));
T644HeaderRecord packetheader;
packetheader.head = 0xFF;
packetheader.serial_number = 0x0102030405060708;
packetheader.cmd = in_bytes[2] | 0x80;
packetheader.tx_bytes = sizeof(T644DataRecord);
memcpy(out_bytes, &packetheader, sizeof(packetheader));
Serial.write(out_bytes, sizeof(T644HeaderRecord));

expected:
{FF}{08}{07}{06}{05}{04}{03}{02}{01}{80}

but receive:
{FF}{00}{00}{00}{FE}{EF}{EF}{FE}{08}{07}{06}{05}{04}{03}{02}{01}{80}{00}{10}{00}{00}{00}{00}{00}

:o

found - struct must be packed:

struct [b]__attribute__((packed))[/b] T644HeaderRecord {
  uint8_t head; // head 0xFF
  uint64_t serial_number;
  uint8_t cmd; // | 0x80; // cmd
  uint16_t tx_bytes;
};

result:

{FF}{08}{07}{06}{05}{04}{03}{02}{01}{80}{0E}{00}