系统 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