C - feof() 和 fscanf() 在将字节 1b 扫描为 char 后停止工作。是因为它是ascii中的"ESC"吗?我能做什么?



我目前正在编写一个程序,处理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");

将成功读取所有字节。(它还将读取行尾标记的rn)

相关内容

  • 没有找到相关文章

最新更新