我想从二进制文件中获取幻数。例如,JPG文件的第一个字节中有表示幻数的FFD8。我该怎么读?我想写一个程序,检查文件扩展名是否响应幻数,以及是否不重命名文件。
这是我认为应该的,但它不起作用。它总是打印不同的值。我希望它能给我一个神奇的数字,如果文件是JPG,那么-FFD8。
int main()
{
FILE *f;
char fName[80];
char *array;
long fSize;
printf("Input file namen");
scanf("%s", fName);
if((f=fopen(fName, "rb"))==NULL)
{
fprintf(stderr, "Errorn");
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);
}
printf("%x", ...)
需要一个int
参数,而您给它的是char *
,即指针。这是不明确的行为。
你的意思可能是
printf("%02hhx%02hhx%02hhx%02hhxn", array[0], array[1], array[2], array[3]);
将前4个字符打印为十六进制数字。(感谢@chux的提醒我了解"hh"修饰符,该修饰符指定转换应用于有符号或无符号的char
参数。)
(但请注意,"FFD8"是两个字节的十六进制表示法:0xFF,0xD8。)