最近在写一个二进制文件,之前都是一帧一帧的写进去然后在一帧一帧的读出,使用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读取,并使用公式转换时才不会出错。
本文探讨了在二进制文件操作中,使用double类型写入数据后,如何正确地使用unsignedchar类型进行读取,避免数据转换错误。通过分析数据转换过程中的顺序颠倒问题,提供了解决方案并解释了原因。
&spm=1001.2101.3001.5002&articleId=44936795&d=1&t=3&u=834000c938a44f9abaf62eabbc4d3578)
319

被折叠的 条评论
为什么被折叠?



