这是一个基本问题,但我预期这个结构体应该占用13个字节的空间(1个char和3个unsigned int各占4个字节)。然而,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
请原谅我的新手问题。我正在尝试学习 :) 如何高效地将结构体的数据组件写入文件?
memcpy
е°Ҷеӯ—иҠӮж•°з»„дёӯзҡ„еӯ—иҠӮеӨҚеҲ¶еҲ°жҲҗе‘ҳдёӯпјҢ然еҗҺи°ғз”Ёntohl
пјҲжҲ–йҖӮеҪ“зҡ„еҮҪж•°пјүжқҘдҝ®еӨҚеӯ—иҠӮйЎәеәҸгҖӮ - Potatoswatter