我正在尝试使用fscanf来解析二进制文件(图像)。
这是文件的开头。我想获得文件的'width'和'height'。在这种情况下,宽度为640,高度为480
00000000: 5036 0a23 2043 7265 6174 6564 2062 7920 P6.# Created by
00000010: 4972 6661 6e56 6965 770a 3634 3020 3438 IrfanView.640 48
00000020: 300a 3235 350a a079 35a0 7833 a179 349f 0.255..y5.x3.y4.
所以标题是'P'some字符后跟0xa(换行),后跟宽度后跟空格(0x20),后跟高度'
在我的代码中,我有
t=fscanf(fin,"P%c\r%d %d",&fc,&w, &h);
or
t=fscanf(fin,"P%c\n%d %d",&fc,&w, &h);
但是t总是返回1(而不是3)而我的w和h不会被读取。
请告诉我如何解决问题?
答案 0 :(得分:2)
您需要跳过“#Created by ... \ n”文字。所以试试:
t=fscanf(fin,"P%c\n%*[^\n] %d %d", &fc, &w, &h);
答案 1 :(得分:2)
你可以通过简单地读取前26个字符,然后在整数变量中保存宽度和高度来实现这一点
char fc[26];
val=fscanf(fp,"%26c %d %d",fc,&w,&h );
“26”是指定当前操作中要读取的最大字符数的宽度。因此,无论它们是什么,这都会读掉前26个字符,并且在阅读宽度和高度方面省去了很多麻烦,这实际上就是你想要的。
小心使用“fc”作为字符串。最后不添加“NULL”字符。 “fc”只是一个字符数组,不会以NULL结尾。