文件中的幻数。 C编程

时间:2014-04-25 17:51:50

标签: c magic-numbers

我想从二进制文件中获取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);
}

1 个答案:

答案 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。)