C ビットフィールドを使用してデータをメモリに格納します。アーカイブを使用するには、これらのデータをファイルに書き込む必要があります (後で別のマシンからのデータと組み合わせる必要があります)。データの配置は実装固有であるため、ビットフィールドをファイルに直接保存することはお勧めできません。
このため、これらのビットフィールドを「シリアル化」して統一された形式で保存する方法をいくつか書きました。
/* uint16 is a unsigned int with size 16 */
typedef struct {
uint16 a : 1;
/* ... just examples ... */
uint16 z : 13;
} data;
void save_data(FILE* fp, data d) {
uint16 tmp;
tmp = d.a;
fwrite(&tmp,sizeof(uint16),1,fp);
/* ... */
tmp = d.z;
fwrite(&tmp,sizeof(uint16),1,fp);
}
これは完全に機能していますが、メンバーをdata
追加するには保存ルーチンにもデータを追加する必要があるため、拡張するのは適切ではないようです。
ビットフィールド データを変更するときに、ルーチン/マクロを調整する必要なく、ビットフィールド データを統一された形式に自動的に変換する方法はありますか?