バイナリ ファイルから特定の形式の構造体への読み取りに問題があります。のように、バイトごとの定義 (オフセット: 0 長さ: 2 値: 0xFF 0xD8、オフセット: 2 長さ: 2 値: 0xFF 0xE1 など) を考えると、構造を定義する方法もファイルを利用する方法もわかりませんfread() のような操作; 探している情報を正しく取り込むために。
現在、私の構造体は次のとおりです。
struct header{
char start; //0xFF 0xD8 required.
char app1_marker; //0xFF 0xE1 required. Make sure app0 marker (0xFF 0xE0) isn't before.
char size_of_app1_block; //big endian
char exif_string; //"EXIF" required
char NULL_bytes; //0x00 0x00 required
char endianness; //II or MM (if not II break file)
char version_number; //42 constant
char offset; //4 blank bytes
};
と
struct tag{
char tag_identifier;
char data_type;
char size_of_data;
char data;
};
構造体の各属性のバイト長が異なる (奇数) 場合、どのデータ型を使用すればよいですか? 2 バイトのスペースを必要とするものもあれば、4 バイトのスペースを必要とするものもあれば、可変長または動的な長さのものもあります。C では char は常に 1 バイトであるため、char 配列を使用することを考えていました。これは良い考えですか?
また、一度に構造全体を読み込もうとしている場合、 fread を使用する適切な方法は何でしょうか? 私はそれを残しますか:
fread(&struct_type, sizeof(char), num_of_bytes, FILE*);
この壁を乗り越えるのに役立つガイダンスがあれば、大歓迎です。私はすでに基本的な構造宣言と構造を理解しています。私が抱えている 2 つの重要な問題は、情報の分散と奇数バイト サイズ、および 1 つの fread ステートメントで可変バイト サイズを構造体に読み込む適切な方法です。
プロジェクトのリンクは次のとおりです: http://people.cs.pitt.edu/~jmisurda/teaching/cs449/2141/cs0449-2141-project1.htm