Основной вопрос, но я ожидал, что эта структура будет занимать 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
Извините за новизну. Я пытаюсь научиться :) Как мне эффективно записывать в файл только компоненты данных моей структуры?