文件中的幻数.C编程



我想从二进制文件中获取幻数。例如,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。)

相关内容

  • 没有找到相关文章

最新更新