QT读写二进制与Python的异同

问题1:字节顺序

要把一个整型数int的数值写入二进制bin文件中。采用默认的方式写出,与Python的struct.pack得到的数据并不一致。如下所示
QT采用流的方式写出
用Hex编辑器打开得到如下的结果
Qt输出结果

Python写出binary
用Hex编辑器打开得到如下的结果
python输出的结果

问题1的解决

通过Hex编辑器发现了,是因为QT默认是按照高位优先排序的,两个结果倒换过来就一样了。
因此,需要在QT的代码中加入以下字符:

// 设置低位优先,
aStream.setByteOrder(QDataStream::LittleEndian);

比如对于整数2020013,若按 big-endian(大端)顺序存储,则按0134、3AB1 的顺序存储,若按 little-endian(小端)顺序存储,则以B13A、3401 的顺序存储。

问题2:单双精度问题

把一个flloat数,用QT写发现出现了8个字节,但是用sizeof(float)只显示有4个字节。如下所示。
qt流写入二进制文件
则出现如下所示二进制
在这里插入图片描述
而用Python则是4个字节

# An highlighted block
with open(path+filename, 'wb')as fp:
    a=0.004999999888241291
    version=struct.pack('f',a)
    fp.write(version)

出现下面的二进制结果:
Python写出float二进制结果
发现Python这个结果更合理一些,是4个字节。

问题2的解决

通过Hex编辑器发现了,是因为QT默认是双精度来输出的,4个字节就是单精度的话,需要把QT默认的精度改为单精度即可。

// 设置为单精度,
aStream.setFloatingPointPrecision(QDataStream::SinglePrecision);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值