您的位置:首页 > 编程语言 > C语言/C++

【C++小坑】fopen打开模式w、wb区别

2017-02-09 10:08 846 查看
系统 windows7

环境 VS2008 VS2015

最近在做图像数据的文件读写操作,按要求需要把N帧图像按特定格式写到文件当中

但是每次写入之后,文件的大小总是与理论计算值有一定偏差

检测文件发现从第一帧图像数据之后,每帧数据的特定文件头总是与理论的位置有偏差,但是调试写入文件的数据内存缓冲,发现位置完全正确没有任何偏移

这就比较艹蛋了

查了不少资料,发现线掉进了文件打开模式的坑里

项目当中保存图像数据,是以二进制数据进行保存

但是我在创建文件,打开文件时使用的是W模式(写文本模式)进行打开

FILE *file;
file=fopen("d:\\file","w");
改成使用wb模式(写二进制模式)打开,再进行数据写入,所有问题全部解决

FILE *file;
file=fopen("d:\\file","wb");


原因是

使用w模式进行写入时,环境认定是文本写入,遇到换行符"0A"时,会转化成回车符+换行符号"0A0D"进行写入,自然就导致了后续数据与理论位置的偏移

但是使用wb模式写入,遇到0A时,会绝对写入0A,不会加入任何其他数据



参考来源:http://www.xuebuyuan.com/2039055.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: