我想将文件保存为二进制文件,因为我听说它可能比普通文本文件小。
现在我正在尝试使用一些文本保存二进制文件,但问题是该文件最后只包含文本和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;
}
答案 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”;