【发布时间】:2014-06-11 13:31:04
【问题描述】:
我想从二进制文件中获取幻数。例如,JPG 文件的第一个字节中的幻数为 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);
}
【问题讨论】:
-
有什么理由让你觉得有必要找出整个文件的大小,并制作一个足够大的缓冲区来容纳它,而实际上你只关心和复制四个字节?如果是这样,您是否意识到文件系统会通过简单的
fstat()高兴地告诉您文件大小? -
我第一次使用二进制文件,所以我想尝试一些新的东西。但是,你能告诉我更多关于 fstat() 的信息吗,因为我找不到任何关于它的信息。
-
好吧,
fstat()不在 C 标准中,但在 POSIX 中,尽管我几乎可以肯定在其他操作系统系列中也有等价物。要使用fstat(),请创建struct stat x,然后在文件描述符/名称和x上调用f-/l-/stat()。那你看看x.st_size。
标签: c magic-numbers