python浮点数表示方法十进制_十六进制十进制浮点数Python

博客作者在处理二进制文件时遇到了浮点数解析的问题。通过使用XVI32查看文件内容,发现浮点数以特定格式存储。经过研究文档,作者发现了一种名为TMS320的浮点数表示方式,并提供了一个解码函数来正确转换这些数值。该函数涉及位操作和浮点数的重新构造,从而成功解决了提取浮点数的问题。
摘要由CSDN通过智能技术生成

我正在从二进制文件读取数据.我有一个文档,可以让我知道信息的存储方式.为确保这一点,我使用XVI32.

我一直在正确提取信息字符串和int数据,直到遇到float数据类型.

根据此文件:

00800000 = 0.0

7AFBDD35 = 0.061087

9BF7783C = -0.003491

00FBFCAD = 0.031416

我试图用以下方法解决此问题:

struct.unpack('!f', my_float.decode('hex'))[0]

和其他不同的方式…

我开始怀疑浮动信息是加密的还是类似的东西,但是为什么不对string和int进行加密?

解决方法:

有趣的难题.使用文档时,我想到了:

def byteswap(x):

return ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8)

def tms320_float(raw):

s = (raw >> 23) & 1

mantissa = (raw & 0x007fffff)

exponent = raw >> 24

if exponent >= 128:

exponent -= 256

if exponent == -128:

return 0.0

return (((-2) ** s) + float(mantissa) / float(1 << 23)) * (2.0 ** exponent)

>>> tms320_float(byteswap(0x00800000))

0.0

>>> tms320_float(byteswap(0x7AFBDD35))

0.06108652427792549

>>> tms320_float(byteswap(0x9BF7783C))

-0.003490658476948738

>>> tms320_float(byteswap(0x00FBFCAD))

0.031415924429893494

标签:base-conversion,python

来源: https://codeday.me/bug/20191201/2079785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值