基本的な質問ですが、この構造体は13バイトのスペースを占めると予想していました(charの場合は1、unsigned intの場合は12)。代わりに、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
失礼します。私は学ぼうとしています:)構造体のデータコンポーネントだけをファイルに効率的に書き込むにはどうすればよいですか?