我想从二进制文件中获取魔数(Magic Number)。例如,JPG 文件的第一个字节中有 FFD8 代表魔数(Magic Number)。我怎样才能读到这个? 我想编写一个程序来检查文件扩展名是否响应魔数(Magic Number),如果不响应则重命名文件。
我认为应该是这样,但行不通。它总是打印不同的值。如果文件是 JPG,我希望它给我魔数(Magic Number) - 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);
}
最佳答案
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。)
关于c - 文件中的魔数(Magic Number)。 C语言编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299815/