我正在尝试读取任何文件类型结尾的文件,并根据它的十六进制值确定它是否为PNG文件。
到目前为止,我已尝试过两条不同的路径,但都没有。
代码:
int IS_PNG_FILE(char *name)
{
FILE *dat = fopen (name, "rt");
if (dat == NULL) return 1;
int data_point;
char buf[16], a[16];
fgets(buf, 16, dat);
printf("%s\n", buf);
int i, b;
for (i=0; i<16; i++)
{
sscanf(&buf[i], "%2x", &b);
a[i] = b;
i += 2;
}
printf("%d\n", a);
fscanf(dat, "%2x", &data_point);
printf("%d\n", data_point);
fclose(dat);
return 0;
}
答案 0 :(得分:5)
为了从文件中读取二进制字节,请使用fread
:
函数fread()从stream指向的流中读取数据的nmemb元素,每个字符长度为字节,将它们存储在ptr给定的位置。
类似的东西:
unsigned char head[8];
fread(head, sizeof(head), 1, dat);
您可以检查返回值以验证实际读取的是8个字节。
然后使用memcmp进行比较
unsigned char signature[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
if (!memcmp(signature, head, 8))
{
...
}