C 将fread分解为多个变量
我有以下代码:C 将fread分解为多个变量,c,linux,C,Linux,我有以下代码: // 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
// 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);
我想一次完成所有fread
,可能使用类似于格式字符串的东西(但是fscanf
仅用于文本文件,对吗?)
非常感谢您的帮助,谢谢 将数据读入足够大小的缓冲区-:
#define READ_BUF_SZ 5
unsigned char readbuf[READ_BUF_SZ];
fread(readbuf, READ_BUF_SZ, 1, fp);
然后从缓冲区分配变量
bit_depth = readbuf[0];
等等。制作一个包含5个元素的数组,并将其读入数组,如下所示:
unsigned char infos[5];
fread(infos, 1, 5, fp);
unsigned char bit_depth = infos[0];
/* etc. */
或者你可以把它放到一个结构中,但是要注意对齐。为了解决这个问题,您可以在它前面加一个#pragma pack
指令,但这不太便于携带。由于元素的类型相同,我建议使用数组方法。*********30个字符
看见
听起来你只是想要一个结构
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以影响其对齐。将所有变量放入结构中,然后读取结构-毕竟,大多数人都是这样做的use@Petesh同意,但要注意对齐问题……这不是答案。这充其量只是一个暗示。也不鼓励只提供链接的答案。