Записать необработанное содержимое структуры (байты) в файл на C. Запутался в фактическом размере записанного

Основной вопрос, но я ожидал, что эта структура будет занимать 13 байтов пространства (1 для char, 12 для 3 беззнаковых целых). Вместо этого sizeof(ESPR_REL_HEADER)дает мне 16 байт.

typedef struct {
  unsigned char version;
  unsigned int  root_node_num;
  unsigned int  node_size;
  unsigned int  node_count;
} ESPR_REL_HEADER;

Что я пытаюсь сделать, так это инициализировать эту структуру некоторыми значениями и записать содержащиеся в ней данные (необработанные байты) в начало файла, чтобы при открытии этого файла позже я мог реконструировать эту структуру и получить некоторые метаданные о том, что содержит остальная часть файла.

Я инициализирую структуру и записываю ее в файл следующим образом:

int esprime_write_btree_header(FILE * fp, unsigned int node_size) {
  ESPR_REL_HEADER header = {
    .version       = 1,
    .root_node_num = 0,
    .node_size     = node_size,
    .node_count    = 1
  };

  return fwrite(&header, sizeof(ESPR_REL_HEADER), 1, fp);
}

Где node_sizeсейчас равен 4, пока я экспериментирую.

Файл содержит следующие данные после того, как я запишу в него структуру:

-bash$  hexdump test.dat
0000000 01 bf f9 8b 00 00 00 00 04 00 00 00 01 00 00 00
0000010

Я ожидаю, что он на самом деле будет содержать:

-bash$  hexdump test.dat
0000000 01 00 00 00 00 04 00 00 00 01 00 00 00
0000010

Извините за новизну. Я пытаюсь научиться :) Как мне эффективно записывать в файл только компоненты данных моей структуры?

7
задан d11wtq 14 April 2012 в 11:16
поделиться