四个字节与float的换算_如何将4字节IEEE(小端)浮点二进制表示转换为浮点数

本文探讨了解决将四个字节表示的IEEE小端浮点二进制转换为浮点数的问题,特别是在Python中遇到的精度问题。作者提供了使用`struct.unpack('<f', sampledata)[0]`进行解码的方法,但因浮点数存储方式导致的不精确性。为确保输出与原始二进制文件一致,提出了通过四舍五入到7位数来解决精度问题的方案。" 132386947,19695035,C++实现Sobel边缘检测算法,"['图像处理', '计算机视觉', 'C++开发', 'OpenCV库']
摘要由CSDN通过智能技术生成

我正在解码一个二进制文件,它有四个字节表示的十进制数字,小端.例如,94 53 F0 40代表7.510202.不幸的是,Python给了我7.51020240784.

当我尝试使用unpack(“< f”,sampledata)[0]解析这些数据时,由于Python存储值的方式,我没有得到原始数据的精确表示(有关更多信息,请参阅http://bugs.python.org/issue4114).

不幸的是,我确实需要获得完全相同的表示 – 无论有关浮点数的不准确性的讨论,因为我需要将这些值写入文本文件,其初始值与最初写入二进制文件的位数相同.

如果可能的话,我宁愿坚持使用Python,但如果有必要,我很乐意在C中实现解决方案.我不能简单地截断unpack函数返回的原因是我无法保证原始float有多少小数位,例如0C 02 0F 41表示根据我的十六进制编辑器的8.938,来自原始二进制文件,它只有小数点后3位.

为了清楚起见,我需要将四个十六进制字节作为输入,并输出文本/ ASCII或IEEE 32位浮点数的数字表示,其具有与创建者所预期的相同的小数位数.文件.输出我将用于创建原始二进制数据文件的CSV,而不是用于实际执行任何计算.

有什么建议?

例:

from __future__ import print_function

from struct import *

print("Should print 7.510202")

hexbytes = b"\x94\x53\xF0\x40"

# 01101001 11001000 11110001 01000000

# should print 7.510202

print(unpack("

解决方法:

4字节IEEE格式浮点数保持大约7位数.你想要做的是将解包的结果四舍五入到总共7位数.从那里,从f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值