двоичный16 в Python - PullRequest
       10

двоичный16 в Python

5 голосов
/ 18 июля 2010

Модуль struct полезен, когда вы пытаетесь преобразовать данные в двоичные форматы и из них. Однако недавно я натолкнулся на спецификацию формата файла, в которой используется двоичный формат 16 с плавающей запятой . Я просмотрел документацию по Python, но не могу найти ничего, что можно конвертировать в него и из него. Как лучше всего преобразовать эти данные в / из поплавков Python?

Ответы [ 3 ]

4 голосов
/ 18 июля 2010

Вы можете сделать это примерно так же, как в 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 голосов
/ 18 июля 2010

В блоге этого парня приведена реализация на обоих языках и на python.Он использует модуль struct, а затем декодирует его вручную.Это не все, что усложняет конверсию.

1 голос
/ 18 июля 2010

Быстрый поиск Google обнаружил http://packages.python.org/bigfloat/, который говорит, что имеет контекст для манипулирования binary16 числами с плавающей точкой. Однако я сам не знаком с пакетом, поэтому не могу ничего рассказать о том, как его использовать (по крайней мере, ничего, кроме того, что вы можете прочитать в документации).

...