【C++小坑】fopen打开模式w、wb区别
2017-02-09 10:08
846 查看
系统 windows7
环境 VS2008 VS2015
最近在做图像数据的文件读写操作,按要求需要把N帧图像按特定格式写到文件当中
但是每次写入之后,文件的大小总是与理论计算值有一定偏差
检测文件发现从第一帧图像数据之后,每帧数据的特定文件头总是与理论的位置有偏差,但是调试写入文件的数据内存缓冲,发现位置完全正确没有任何偏移
这就比较艹蛋了
查了不少资料,发现线掉进了文件打开模式的坑里
项目当中保存图像数据,是以二进制数据进行保存
但是我在创建文件,打开文件时使用的是W模式(写文本模式)进行打开
原因是
使用w模式进行写入时,环境认定是文本写入,遇到换行符"0A"时,会转化成回车符+换行符号"0A0D"进行写入,自然就导致了后续数据与理论位置的偏移
但是使用wb模式写入,遇到0A时,会绝对写入0A,不会加入任何其他数据
参考来源:http://www.xuebuyuan.com/2039055.html
环境 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
相关文章推荐
- C\C++中 fopen中w w+ wb区别:
- fopen打开文件模式rb和rb+有什么区别
- C\C++中 fopen中w w+ wb区别
- C/C++/Python等 使用二进制模式打开文件与不使用二进制模式的区别
- 【转】fopen 打开模式总结
- c++中 fopen中打开文件方式以及相应的含义
- fopen时w与wb的区别
- Linux 和 Windows 中 fopen 打开方式的区别
- C中fopen打开方式r和rb的区别
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- fread函数以二进制模式和文本模式打开的区别
- fopen 打开模式总结
- C++ 文件打开模式
- fopen里面那个二进制打开和ascii打开有什么区别
- fopen中w和wb的区别
- fopen 打开模式总结
- fopen中文件的几种打开模式比较
- fopen 打开模式总结
- FAQ8: fopen的打开模式迷惑
- fopen c++打开文件