我目前正在编写一个程序,处理PPM文件(P6类型,而不是P3)问题是一些图像具有字节0x1b,根据ascii表称为'ESC'
下面是我的代码://所有包含there,,,,…
int main(void)
{
FILE *finput;
int number[7];
char r, g, b;
finput = fopen("my.ppm", "r");
/*
The code where I read the P6 numRows numColumns 255n
...Lets assume that part works well
*/
while(!feof(finput))
{
num[0] = fscanf(finput, "%c", &r); // the "num[] = " part is for debugging
num[1] = fscanf(finput, "%c", &g);
num[2] = fscanf(finput, "%c", &b);
printf("%dn", num[0]);
printf("%dn", num[1]);
printf("%dn", num[2]);
}
return 0; //or whatever...
}
由于某些原因,fscanf在读取'ESC'字节后开始返回-1(但是读取它的那个不返回-1)
那么样本输出将是:
111
另一方面,我读了"while(! fof())总是错误的"和关于fscanf大文件的那个,但我的ppm图像不大于500x500像素…
为了能够继续阅读,我能/应该做些什么?
谢谢你的帮助!
我猜你用的是Windows;一个值为(见注释;这个解释是错误的,但解决方案有效,大概是因为数据中有一个0x1b
的字节在Windows上表示文本文件的"文件结束"。0x1a
)。
你应该以二进制模式打开文件:
fopen("my.ppm", "rb");
将成功读取所有字节。(它还将读取行尾标记的r
和n
)