阅读\用char&float和float浮动写二进制文件

时间:2015-07-20 21:38:26

标签: c binary

我是C的新手,就像tittle说的那样,我正在尝试编写一个简单的程序来读取和写入二进制文件。代码如下:

#include<stdio.h>

int main(void){

    FILE *fd = fopen("binFile.bin", "wb");

    if(fd == NULL){
        printf("Failed to open/create file.\n");
        return -1;
    }

    char buff1[] = "#This is a comment.\n";
    fwrite(buff1,1,sizeof(buff1),fd);
    char buff2[] = "#This is another comment.\n";
    fwrite(buff2,1,sizeof(buff2),fd);

    int i;
    float f[3];

    for(i=0; i<100; i++){
        f[0] = i-1;
        f[1] = i;
        f[2] = i+1;

        fwrite(f,sizeof(f),1,fd);
    }

    fclose(fd);

    fd = fopen("binFile.bin", "rb");

    if(fd == NULL){
        printf("Failed to read file.\n");
        return -1;
    }

    char buff[100];

    do{
        fread(buff,1,sizeof(buff),fd);
        printf("%s",buff);
    }
    while(!feof(fd));

    fclose(fd);

    return 0;
}

当我运行此代码时,它只打印:

#This is a comment.

我知道我没有对文件使用一堆检查;但是,我认为问题在于我试图用相同的缓冲区读取字符串和浮点数,因为使用相同的代码只是为了char(或者只是浮点数)工作正好。我猜我必须以某种方式知道char的字节结束的位置以及浮动因素开始相应地调整我的缓冲区大小/类型。

我希望我充分解释自己。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

查看二进制文件

enter image description here

正如您所看到的,在字节 14h 处有一个空终止符,就在“这是注释。\ n ”字符串之后。

这是因为你在用字符串文字初始化的char数组上使用sizeof(buff1),这样的文字总是包含空终结符

另请注意您存储浮点数是二进制格式,如果您的系统使用IEEE754(我的),当您写 -1 时编码为{{ 1}}。
这导致文件中的字节值为0,这样的字节也将被解释为空终止符。