“Décompresser nécessite un argument de type chaîne de longueur 4” lors du déballage de flotteurs?
Je suis en train de convertir la valeur hexadécimale à flotteur à l'aide de (Python 2.7) la méthode suivante:
def hex2float(x):
y = 0
z = x.decode('hex')
try:
y = struct.unpack('!f', z)[0]
except:
print sys.exc_info()[1]
print 'z = ' + z
print 'y = %s' % (y)
print 'x = ' + x
return
def foo28():
x = '615885' #8.9398e-039
hex2float(x)
La sortie est comme suit:
unpack requires a string argument of length 4
z = aXà
y = 0
x = 615885
J'ai remarqué que je reçois le message d'exception pour de très petites valeurs. Est-il un bon moyen de convertir les valeurs hexadécimales pour les valeurs flottantes pour de tels cas.
Oui, parce que vous avez besoin de 4 octets pour obtenir le 32 bits (32 bits float) représenter le flotteur. Il n'y a pas de moyen trivial de "pad" de ce numéro dans la norme IEEE-754 que je suis au courant; peut-être la source est corrompu?
OriginalL'auteur gudge | 2012-05-01
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de quatre octets pour décompresser, donc ajouter des octets nuls si nécessaire:
Normalement
str.decode
sorties seulement autant d'octets que nécessaire pour représenter la valeur, c'est pourquoi vous ne voyez se produire pour de petites valeurs.Cela fonctionne parfaitement:
Si vous allez faire des doubles ainsi cette solution fonctionne toujours, il suffit de changer
4
à8
.Merci @nightcracker.
OriginalL'auteur orlp