2进制存储。c++
int main()
{
int i=3000;
ifstream in_stream;
ofstream out_stream("d:/12.txt", ios::binary);
//out_stream.open("d:/11.txt", ios::binary);
//以二进制形式写入i
out_stream.write((char *)&i,sizeof(i));
out_stream.close();
in_stream.open("d:/12.txt", ios::binary);
int k;
//读取k
in_stream.read((char*)&k,sizeof(k));
cout<<k<<endl;
in_stream.close();
return 0;
}
上面是简单的2进制存储于读取,但这个仅限于变量i是整形的时候,
我自己把i改成字符或者字符串,他写进去的就不是2进制了,试验了
半天,一直没弄懂为什么
int main()
{
char i[100]="3000";
ifstream in_stream;
ofstream out_stream("d:/12.txt", ios::binary);
//out_stream.open("d:/11.txt", ios::binary);
//以二进制形式写入i
out_stream.write(i,strlen(i));
out_stream.close();
in_stream.open("d:/12.txt", ios::binary);
char k[100];
//读取k
in_stream.read(k,strlen(i));
k[strlen(i)] = '\0';
cout<<k<<endl;
in_stream.close();
return 0;
}
[解决办法]
这个问题前些日期刚有人问过(我不记得哪一贴了)
这是个概念问题,你所谓的"他写进去的就不是2进制了"这个说法是错误的,在计算机中,所有文件都是以二进制代码存储的,只是有些编码对用户来说是"可见的",如acsii编码,汉字等,我们习惯上把它们称作文本文件
第一程序,当你在文件中写入3000时,文件内容为B8 0B 00 00,它是intel int的16进制格式,文本编辑器不可见,所以你会认为它是2进制了文件
第二个程序,字串"3000" 文件内容为33 30 30 30 ,它分别为字符3000的ascii码,只是你用文本编辑器打开它是可见的.
你用下ultra-edit或winhex就可以看到文件的内部代码了