我想从二进制文件中获取Magic Number。例如,JPG文件在第一个字节中具有用于Magic Number的FFD8。我怎么读这个? 我想编写一个程序来检查文件扩展名是否响应了幻数,以及是否不重命名该文件。
这是我认为它应该是,但它不起作用。它总是打印不同的值。如果文件是JPG那么我希望它给我一个神奇的数字 - FFD8。
int main()
{
FILE *f;
char fName[80];
char *array;
long fSize;
printf("Input file name\n");
scanf("%s", fName);
if((f=fopen(fName, "rb"))==NULL)
{
fprintf(stderr, "Error\n");
exit(1);
}
fseek (f , 0 , SEEK_END);
fSize = ftell (f);
rewind (f);
array=(char *)malloc(fSize+1);
fread(array, sizeof(char), 4, f);
printf("%x", array);
free(array);
}
答案 0 :(得分:2)
printf("%x", ...)
需要一个int
参数,你给它一个char *
,即一个指针。这是未定义的行为。
你可能意味着什么
printf("%02hhx%02hhx%02hhx%02hhx\n", array[0], array[1], array[2], array[3]);
将前4个字符打印为十六进制数字。 (感谢@chux的提醒
我关于“hh”修饰符,它指定转换适用于有符号或无符号char
参数。)
(但请注意,“FFD8”是两个字节的十六进制表示法:0xFF,0xD8。)