问题1:在qt中,可以使用qtEndian的方式在对int类型进行装换,但是对于float不能转换。
转换函数如下:(针对于4字节的Float类型)
float swapFloat(float value){
union{
float f;
unsigned char d[4];
}source, dest;
source.f = value;
dest.b[0] = source.b[3];
dest.b[1] = source.b[2];
dest.b[2] = source.b[1];
dest.b[3] = source.b[0];
return dest.f;
}
解决方式:利用union集合的特性,取出float的4字节数组,对其进行大小端数据顺序调换。
问题2:在用QDataStream方式流出Float类型时,数据出错。
QbyteArray bty;
QDataStream out(&bty, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
//设置大端模式
out.setByteOrder(QDataStream::BigEndian);
//其中设置Float精度问题
out.setFloatingPointPrecision(QDataStream::singlePrecision);
out >> float;
解决方式:设置QDataStream中精度问题,单精度,在接收4字节的Float类型的时候就不会出错。