我有以下代码:
// fp is a FILE opened in binary mode
unsigned char bit_depth;
unsigned char color_type;
unsigned char compression_method;
unsigned char filter_method;
unsigned char interlace_method;
fread(&bit_depth, 1, 1, fp);
fread(&color_type, 1, 1, fp);
fread(&compression_method, 1, 1, fp);
fread(&filter_method, 1, 1, fp);
fread(&interlace_method, 1, 1, fp);
我想一次性使用所有freads
,也许使用类似于格式字符串的内容(但fscanf
仅适用于文本文件,对吧?)。
非常感谢任何帮助,谢谢!
答案 0 :(得分:4)
听起来你只想要一个结构。
typedef struct info {
unsigned char bit_depth;
unsigned char color_type;
unsigned char compression_method;
unsigned char filter_method;
unsigned char interlace_method;
} info_t;
info_t my_info;
fread(&my_info, sizeof(info_t), 1, fp);
但是,请注意结构填充。如果文件只用5个字节写入,那么你需要检查你的调试器,并确保这不会弄乱你的文件指针。通常,结构与8字节边界对齐,因此请查看sizeof(info_t)的计算结果,并在必要时在结构周围放置一个pragma以影响其对齐。
答案 1 :(得分:3)
创建一个包含5个元素的数组并将其读入数组,如下所示:
unsigned char infos[5];
fread(infos, 1, 5, fp);
unsigned char bit_depth = infos[0];
/* etc. */
或者你可以将它放入一个结构中,但要注意对齐。为了解决这个问题,你可以在它前面添加一个#pragma pack
指令,但那样便于携带。由于元素属于同一类型,我推荐使用数组方法。
答案 2 :(得分:1)
将数据读入足够大小的缓冲区 - :
#define READ_BUF_SZ 5
unsigned char readbuf[READ_BUF_SZ];
fread(readbuf, READ_BUF_SZ, 1, fp);
然后从缓冲区中分配变量
bit_depth = readbuf[0];
等
答案 3 :(得分:-1)
** * ** * 需要30个字符 * ** * ** * 强>
看到
http://www.cplusplus.com/reference/cstdio/fread