设为首页 加入收藏

TOP

C++二进制文件读写
2014-11-14 21:15:25 】 浏览:3518
Tags:二进制 文件 读写

  今天在做项目时联想到了这两个问题,所以实际编程测试了一下,有一些新的收获:


  <1> 我一直以为自己很熟悉如何使用C/C++中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。比如:


  FILE* fp = fopen("binary","wb");


  //FILE* fp = fopen("character.txt","w");


  fprintf(fp,"count is %d",250);


  上述代码一个使用的是text file mode,一个是binary file mode,但结果生成的二进制文件中保存的仍然是ASCII码,直接用记事本就可以打开查看。要说区别,主要是换行符的区别,binary file的换行符为 ,而text file的换行符为 ,仅此而已,我就想怎么回事啊,我明明是用二进制模式打开的文件呀,怎么里面直接保存的还是 ASCII码?也就是说保存125这个数字还是会占用3个字节,而不是我想象中那样只占一个字节!


  后来我就换用C++,结果还是一样,代码如下:


  ofstream fs("binary",ios::binary);


  //ofstream fs("character.txt");


  int i = 32765;


  fs<


  //fs.write((char*)&i,2);


  fs.close();


  无论以二进制文件模式打开还是以文本模式打开,文件中都是保存着文本!似乎C/C++中的binary模式不起作用!?!


  后来查阅资料才知道:要想在C/C++中将数据以二进制形式文件输出,与你打开文件时的模式没有关系,关键是取决于你调用哪个函数往文件里写东西!!只有使用fwrite和fs.write()函数才能以二进制形式输出到文件中,调用puts、fprintf、<<等函数输出的都是 ASCII文本,尤其需要注意的是类似于上面代码段中那样,在C++中,即使你用fs<


  此外,要注意,你不能用>>来读取以二进制文件格式存储的整数!(注:中午我试过了,不行!这再次证明>>只能读入文本格式的数字)


  (补注:11:47am 我后来又想,所有上面的这些东西可以归结成一句话:你以什么模式打开文件根本不重要,因为你既改变不了文件本身的内容,也改变不了C/C++中系统函数的工作方式,所以在编程的时候,你只要关心这个文件里的数据内容本身是二进制格式还是文本格式就好了!如果内容是文本格式的,你就调用文本格式那一套函数,比如puts,gets,fscanf,fprintf,<<,>>等,如果内容是二进制格式的,你就调用二进制格式那一套函数,比如fread,fwrite,ifstream.read(),ofstream.write()等。只要保持文件内容与处理函数相对应相一致就可以了,别管它用什么模式打开文件!!假如你用<<向一个二进制文件中输入一个整数,那么其实里面保存的是文本格式的数据,那么你就照样可以以二进制模式打开它,然后用>>来读取这个整数。相反,如果你的二进制文件里面是一个以二进制形式保存的整数,那你肯定不能用>>来读取里面的整数了!!


  <2>关于字节序的问题,我想用一张图来表示就足够了:


  今天终于弄明白怎样使用C++读写二进制文件了。


  要读取文件必须包含 头文件,这里包含了C++读写文件的方法。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC中使用数学常量M_PI 下一篇C++语言void及void指针深层探索

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目