Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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