5

struct当您尝试将数据转换为二进制格式时,该模块很有用。但是,最近我遇到了一个使用binary16 浮点格式的文件格式规范。我查看了 Python 文档,但找不到任何可以与之相互转换的东西。将此数据转换为 Python 浮点数/从 Python 浮点数转换的最佳方法是什么?

4

3 回答 3

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
于 2010-07-18T04:42:32.553 回答
2

这家伙的博客文章给出了两个和 python 的实现。他使用该struct模块,然后手动对其进行解码。转换并不是那么复杂。

于 2010-07-18T04:25:03.283 回答
1

一个快速的谷歌搜索出现了http://packages.python.org/bigfloat/它说它有一个操作binary16浮点数的上下文。不过,我自己对这个包并不熟悉,所以我无法告诉你如何使用它(至少,你只能在文档中阅读自己的内容)。

于 2010-07-18T04:19:23.903 回答