在给定特定格式的情况下,我无法将二进制文件读取到结构中。如,给定一个逐字节的定义(偏移量: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 个,甚至有些是可变/动态长度。我正在考虑使用 char 数组,因为 char 在 C 中始终是一个字节。这是个好主意吗?
另外,如果我试图一次读取整个结构,使用 fread 的正确方法是什么?我会把它留在:
fread(&struct_type, sizeof(char), num_of_bytes, FILE*);
任何帮助我越过这堵墙的指导将不胜感激。我已经了解了基本的结构声明和构造,我遇到的两个关键问题是信息的方差和奇数字节大小,以及在一个 fread 语句中将可变字节大小读入结构的正确方法。
这是项目链接: http: //people.cs.pitt.edu/~jmisurda/teaching/cs449/2141/cs0449-2141-project1.htm