Question

L' struct le module est utile lorsque vous essayez de convertir des données vers et à partir de formats binaires.Cependant, récemment, je suis tombé sur une spécification de format de fichier qui utilise le binary16 format à virgule flottante.J'ai regardé à travers la documentation Python, mais ne peut pas trouver quelque chose qui peut convertir vers et à partir d'elle.Quel serait le meilleur moyen de convertir ces données vers/à partir de Python flotteurs?

Était-ce utile?

La solution

Vous pouvez le faire à peu près que vous le feriez dans C - I.e., je pense, à peu près à ceci ...:

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

Autres conseils

Ce gars post de blog donne une mise en œuvre dans les deux et python.Il utilise le struct module, puis décode manuellement.Il n'est pas du tout compliqué de conversion.

Une recherche rapide Google a été allumée http://packages.python.org/bigfloat/ qui dit qu'il a un contexte pour la manipulation des nombres de points flottants geniègoDiceCode.Je ne connaissais pas moi-même avec le paquet moi-même, alors je ne pouvais donc rien vous dire sur la façon de l'utiliser (au moins, rien de plus que vous ne pouvez vous lire dans la documentation).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top