Pages : 1
#1 Le 04/08/2012, à 16:40
- xens
python conversion array -> float
Bonsoir,
dans le cadre d'un projet je dois convertir une série de valeurs contenues dans un buffer, voilà ce que me dit la documentation:
Value = [220, 231, 26, 56] (big endian)
Size = 4 bytes
Description = Calibration 1 value
Recommended Type = float
Voilà donc je dois convertir la chaine [220, 231, 26, 56] en une valeur de type float, vu qu'on est en base 256 je fais le calcul suivant:
value=[220, 231, 26, 56]
result=(value[3]*16777216)+(value[2]*65536)+(value[1]*256)+(value[0])
j'obtiens 941287388
est-ce que ça vous semble correct ?
Romain
Dernière modification par xens (Le 08/08/2012, à 15:32)
Hors ligne
#2 Le 05/08/2012, à 13:22
- grim7reaper
Re : python conversion array -> float
Salut,
Pourquoi il y a « octal » dans le titre de ton sujet ? (octal = base 8, pas base 256).
Comment sont encodé tes nombres flottants ? Ça suit la norme la norme IEEE 754 ?
Je pense que ta méthode est mauvaise (les flottants ne sont généralement pas codés aussi simplement que les entiers), car là tu n’auras jamais de nombre décimaux. Ça doit être de l’IEEE 754 mais essaye de vérifier.
Édit : au cas ou c’est de l’IEEE 754, tu peux t’amuser avec le module struct de Python. Petit exemple en Python 3
import struct
buf = bytearray([220, 231, 26, 56]) # buf = '\xdc\xe7\x1a\x38' pour Python 2.
struct.unpack('>f', buf)
Le '>' est là pour indiquer big-endian, plus d’info ici.
Devrait produire un truc du genre :
(-5.203963795252183e+17,)
Dernière modification par grim7reaper (Le 06/08/2012, à 06:26)
Hors ligne