qt中Float类型大小端转换

文章讨论了在Qt中如何正确地将float类型在endianness(字节顺序)间转换,包括使用`floatswapFloat`函数以及在QDataStream中设置正确的精度和字节顺序以避免数据错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题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类型的时候就不会出错。



大小端字节序原理

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值