这是我想要做的。我编写了一个简短的 C 代码,它将打开一个文件,读取前 2 个字节(2 个字符)并将其与 2 个字符串进行比较。这是为了帮助识别文件类型(让我们将前 2 个字节称为文件的签名)。
现在,一旦我从文件中读取了 2 个字节,我想将它与预定义的签名进行比较,并基于该签名打印文件类型。
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
char signature[2];
if(argc!=2)
{
printf("usage: fileio.c <filename>\n");
exit(1);
}
if((fp=fopen(argv[1],"r"))!=NULL)
{
fscanf(fp,"%c %c", &signature[0], &signature[1]);
printf("%x %x\n",signature[0],signature[1]);
}
}
如果我在 Windows 平台上为可执行文件运行它,它将显示输出为:4a 5d,因为它是 MZ 签名。
现在,我想做这样的事情:
将签名数组的 2 个字节与 0x4d5a 进行比较,如果它们相等,则打印它是可执行文件。
我认为的另一种方式是,将其与字符串“MZ”进行比较。但是我需要使用 fscanf 从文件中读取前 2 个字节并将它们存储在一个字符串中。然后将其与“MZ”签名进行比较。
如果我可以使用十六进制字节来做到这一点,那就太好了,因为稍后我需要对十六进制字节执行一些操作。
谢谢。