Python中的binary16
struct
模块在你需要将数据转换成二进制格式或者从二进制格式转换回来时非常有用。不过,最近我遇到了一种文件格式,它使用了binary16浮点格式。我查阅了Python的文档,但没有找到可以进行这种转换的内容。那么,最好的方法是什么呢?如何将这种数据转换成Python的浮点数?
3 个回答
1
我快速在谷歌上搜索了一下,发现了一个链接 http://packages.python.org/bigfloat/,这个网站上说它可以处理 binary16
这种浮点数。至于这个工具包我自己不太熟悉,所以我不能告诉你怎么使用它(至少,我能告诉你的也就是你自己在文档里能看到的内容)。
2
这位博主在他的博客中分享了一个用Python实现的例子。 他使用了一个叫做struct
的模块,然后手动解码。 其实这个转换并没有那么复杂。
4
你可以大致按照在C语言中做的方式来实现,也就是说,我觉得大概可以这样做……:
def tofloat(b16):
sign = -1 if b16 & 0x8000 else +1
expo = ( b16 & 0x7C00 ) >> 10
prec = b16 & 0x03FF
if expo == 0:
return sign * (2.0 ** -24) * prec
elif expo == 0x1F:
return sign * float('inf')
prec |= 0x0400
return sign * (2.0 ** (expo - 25)) * prec