最近在写一个二进制文件,之前都是一帧一帧的写进去然后在一帧一帧的读出,使用fread与fwrite都没有出现任何问题,但是当我以double型写入,使用unsigned char读出的时候就出现了问题,经过一段时间的摸索,发现了其中的原因。
例子:
写入:
double a=188045987.56391;
fwrite(&a,8,1,fp);
读出:
unsigned char* bytebuf1 = new unsigned char[8];
fread(bytebuf1, 8, 1, Inputfp);
结果:
bytebuf1的8个字节转换出来的值与a不搭边。
问题分析与解决办法:
通过摸索和跟踪,发现采用double类型写入的时候,double将16位字节的顺序以反向的方式排列,因此采用double写入的时候,需要将其反向,这样下面在采用unsigned char读取,并使用公式转换时才不会出错。