将数据保存到二进制文件

时间:2011-04-13 11:26:48

标签: c file binary io

我想将文件保存为二进制文件,因为我听说它可能比普通文本文件小。

现在我正在尝试使用一些文本保存二进制文件,但问题是该文件最后只包含文本和NULL。我希望文件中只能看到零和一个。

非常感谢任何解释或建议。

这是我的代码

#include <iostream>
#include <stdio.h>

int main()
{
     /*Temporary data buffer*/
     char buffer[20];

     /*Data to be stored in file*/
     char temp[20]="Test";

     /*Opening file for writing in binary mode*/
     FILE *handleWrite=fopen("test.bin","wb");

     /*Writing data to file*/
     fwrite(temp, 1, 13, handleWrite);

     /*Closing File*/
     fclose(handleWrite);

    /*Opening file for reading*/
    FILE *handleRead=fopen("test.bin","rb");

    /*Reading data from file into temporary buffer*/
    fread(buffer,1,13,handleRead);

    /*Displaying content of file on console*/
    printf("%s",buffer);

    /*Closing File*/
    fclose(handleRead);
    std::system("pause");

    return 0;
}

6 个答案:

答案 0 :(得分:12)

所有文件只包含1和0,在二进制计算机上可以播放。

保存文本时,您将保存该文本的二进制表示形式,并在给定的编码中定义每个字母如何映射到位。

因此对于文本,文本文件或二进制文件几乎无关紧要;您听说过的空间节省通常会对其他数据类型起作用。

考虑浮点数,例如3.141592653589。如果保存为文本,则每个数字需要一个字符(只计算它们)加上句点。如果以二进制形式保存为float位的副本,则在典型的32位系统上将需要四个字符(四个字节或32位)。调用存储的确切位数,例如:

FILE *my_file = fopen("pi.bin", "wb");
float x = 3.1415;
fwrite(&x, sizeof x, 1, my_file);

CHAR_BIT * sizeof x,请<stdlib.h>查看CHAR_BIT

答案 1 :(得分:12)

答案 2 :(得分:2)

嗯,本机和二进制之间的区别是处理行尾的方式。 如果你在二进制文件中写一个字符串,它将保留字符串。

如果你想让它变小,你必须以某种方式压缩它(例如寻找libz)。

更小的是:当想要保存二进制数据(如字节数组)时,将其保存为二进制文件而不是将其保存为字符串(以hexa表示或base64为单位)更小。我希望这会有所帮助。

答案 3 :(得分:1)

我觉得你在这里有点困惑。

当您将ASCII字符串“Test”写入文件时(即使在二进制模式下),它仍然是ASCII字符串。写二进制有意义的情况是除了字符之外的其他类型(例如整数数组)。

答案 4 :(得分:0)

尝试替换

FILE *handleWrite=fopen("test.bin","wb");
fwrite(temp, 1, 13, handleWrite);

FILE *handleWrite=fopen("test.bin","w");
fprintf(handleWrite, "%s", temp);

答案 5 :(得分:0)

函数printf(“%s”,缓冲区);将缓冲区打印为零结束字符串。

尝试使用: char temp [20] =“Test \ n \ rTest”;