如何在C中读取目标文件?

时间:2012-11-20 01:04:02

标签: c fgetc

假设有一个目标文件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);

2 个答案:

答案 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