我试图用来fread()确定文件是否是 jpeg,我的想法是使用fread()读取文件的标题以确保它是 jpeg,然后,如果是 - 复制文件。我知道标准的 jpeg 标头是0xff 0xd8 0xff 0xe(0 to f),所以我编写了一个程序来读取文件的前四个字节。
#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main (int argc, char *argv[])
{
FILE *in = fopen(argv[1], "rb");
FILE *out = fopen("output.jpg", "wb");
BYTE buffer [4096];
while (fread(buffer, 1, sizeof(buffer), in))
{
if ((buffer[0] == 0xff) & (buffer[1] == 0xd8) & (buffer[2] == 0xff) & ((buffer[3] & 0xf0) == 0xe0))
{
fwrite(buffer, 1, sizeof(buffer), out);
}
}
fclose(in);
fclose(out);
}
但是,运行程序后,当我尝试打开时output.jpg,我收到消息:Invalid or Unsupported Image Format.
我决定fwrite()通过将段落更改为:
while (fread(buffer, 1, sizeof(buffer), in))
{
fwrite(buffer, 1, sizeof(buffer), out);
}
在这种情况下,output.jpg 确实打开正确,这让我认为这是我试图用来fread()检查导致问题的文件类型。我应该使用不同的功能,还是只是格式不正确?