Вопрос

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

Это было полезно?

Решение

Вы можете сделать это примерно так, будто вы сделаете это в C - I.e., я думаю, примерно так же ...:

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
.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top