首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

2进制存储。c++解决思路

2012-03-23 
2进制存储。c++int main(){int i3000ifstream in_streamofstream out_stream(d:/12.txt, ios::binary)

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就可以看到文件的内部代码了
 

热点排行