有人可以解释一下如何从二进制文件中读取内容吗?
我做到了:
FILE *fp;
int a[50];
fp=fopen("x.exe","rb");
while(fread(&a,sizeof(a),1,fp)==1)
{
printf("%d",a);
}
假设该文件只包含整数值。
我也厌倦了使用结构写入文件,我可以轻松地读取和写入它的内容,但是当我尝试读取其他二进制文件时,我只是获得了垃圾值。
或者是否无法读取已编译和链接的.exe
文件?
答案 0 :(得分:0)
正确的方法是:
int myreadfile(void)
{
FILE *fp;
int i, n;
unsigned char a[50];
if (!(fp=fopen("x.exe","rb"))) return(0);
while(n=fread(a,1,sizeof(a), fp))
{
for (i=0; i<n; i++)
printf("%02x ",a[i]);
printf("\n");
}
fclose(fp);
return 1;
}
请注意,缓冲区的类型为unsigned char。那是因为
a)您不知道该文件是否是完整数量的整数(但它是字符,即字节)和
b)在printf
调用中,char
将转换为int
,并且字符的高位为1,它将被符号扩展,我们不想要。
此外,fread
不会尝试读取整个缓冲区,而是只读取文件中的任意数量的字节(最大缓冲区)。