c中的文件输入输出

时间:2018-01-27 16:15:09

标签: c file input

有人可以解释一下如何从二进制文件中读取内容吗?

我做到了:

FILE *fp;
int a[50];
fp=fopen("x.exe","rb");
while(fread(&a,sizeof(a),1,fp)==1)
{
    printf("%d",a);
}

假设该文件只包含整数值。

我也厌倦了使用结构写入文件,我可以轻松地读取和写入它的内容,但是当我尝试读取其他二进制文件时,我只是获得了垃圾值。

或者是否无法读取已编译和链接的.exe文件?

1 个答案:

答案 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不会尝试读取整个缓冲区,而是只读取文件中的任意数量的字节(最大缓冲区)。