Python中的二进制16

Posted

技术标签:

【中文标题】Python中的二进制16【英文标题】:binary16 in Python 【发布时间】:2011-03-17 12:00:26 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你可以大致像在 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

【讨论】:

【参考方案2】:

This guy's blog post 在和 python 中都提供了一个实现。他使用struct 模块,然后手动解码。转换并不是那么复杂。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Python中的二进制16的主要内容,如果未能解决你的问题,请参考以下文章

C++怎么把文件读取成16进制的,显示出来,或者16进制的写入文件.

python怎样将16进制转化为2进制

Python中的二进制到字符串/文本

浮点到 16 位二进制补码二进制,Python

python各数据类型及内置方式:

用Python 3.1.3 写几个进制转换的程序