假设有一个目标文件input.obj。在终端中,如果我执行“cat input.obj”,它会返回一些随机字符,例如“??? A?J”。但当我“hexdump”它时,它会显示我想要读入我的程序的值。
我将这个obj文件读入program.c,首先使用fopen打开它,然后使用fgetc逐字节读取。但是,它实际上正在读取“cat input.obj”中所示的内容,而我希望它以hexdump中的形式读取实际内容。有什么想法吗?
代码段(来自海报的评论):
char *filename;
FILE *f;
char c;
f = fopen(filename, "r");
c = fgetc(f);
答案 0 :(得分:1)
基本上,您需要打印每个字节的整数表示以获得所需内容,而不是字节本身。试试这个:
char ch = ...; // Set ch to the value you read from the file
printf("%x", ch & 0xff);
& 0xFF确保将值打印为1个字节。
答案 1 :(得分:0)
这也是我遇到过的一个问题。 令人惊讶的是,fopen和fgetc将无法获取整个文本文件,并且无需解析整个目标文件即可到达EOF。
改为使用open()和read()系统调用。您可以使用手册页检查它们的语法。
它们为您提供了当您执行
时所看到的整个目标文件$ hexdump -C 1_hello.o