1

所以我有一个非常简单的程序来读取文件的前 3 个字节:

诠释主要(无效)

{

    文件 *fd = NULL;
    诠释我;
    无符号字符测试 = 0;
    fd = fopen("test.bmp", "r");

    printf("位置:%ld\n", ftell(fd));

    对于 (i=0; i<3; i++) {
        fread(&test, sizeof (unsigned char), 1, fd);
        printf("位置: %ld 字符:%X\n", ftell(fd), test);
    }

    返回(0);
}

当我尝试使用文本文件时,它可以正常工作:

位置:0
位置:1 个字符:61
位置:2 字符:62
位置:3 字符:63

但是当我使用 PNG 运行它时,我得到:

位置:0
位置:147 字符:89
位置:148 字符:50
位置:149 字符:4E

请注意,文件的前 3 个字节确实是 89 50 4E 但我不知道 147 来自哪里。使用 bmp 文件,我得到:

位置:0
位置:-1 字符:42
位置:0 字符:4D
位置:1 个字符:76

你知道这些第一位置是从哪里来的吗?非常感谢你的帮助

4

3 回答 3

4

您需要以二进制模式打开文件:

fd = fopen("test.bmp", "rb");

如果您尝试在文本模式下读取二进制文件(如位图),则与回车和换行相对应的字节会使事情变得混乱。

于 2010-07-09T09:57:08.997 回答
0

请看这个问题Reading bytes from bmp file

看起来问题在于打开它的模式。

于 2010-07-09T10:00:56.910 回答
0
  • 检查文件是否存在于您的开发人员/程序目录中
  • 检查文件是否被其他应用程序使用
  • 尝试以第二个名称复制文件,然后打开此文件
  • 检查操作系统:Windows 使用 C:\Users\ 和 Linux /home/user (你可以看到差异吗?
  • 检查您的代码,如果它适用于 Windows 使用:C:\\Users\\you\\filename.ext
  • 检查您的文件限制,如果全部失败,请增加它
  • 最后但并非最不重要的是,使用fseek(filehandle,SEEK_SET) 指向文件顶部(位置:0)的文件指针;
于 2021-09-09T04:35:58.627 回答