c - 文件中的魔数(Magic Number)。 C语言编程

标签 c magic-numbers

我想从二进制文件中获取魔数(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/

相关文章:

我可以使用 cmocka 模拟返回结构的函数吗?

c++ - C/C++ : maximum size of errno-associated strings (at compile-time)

c - 我怎么不能忽略 0(零)作为成绩?

c++ - 将内存分配给 void* 时的 gcc calloc 行为

c - 在C/CGI中处理后URL发生变化

java - 魔法值不兼容错误

magic-numbers - 23,148,855,308,184,500 是一个神奇的数字,还是纯粹的偶然?

java - 是否值得创建自定义注释来表明方法只是有助于提高可读性?

c# - 使用变量与魔数(Magic Number)的性能影响

c++ - "magic number"的概念是否随着语言的变化而变化?