Bonjour à tous,

je parviens à récupérer les données d'une ancienne base de données via python et un éditeur hexadecimal.

La representation des flottants dans cette base est assez particuliere..
Dans l'editeur hexadecimal, j'ai ceci pour les nombres :

30 : 41 30 00 00 00 00 00 00
1 : 40 10 00 00 00 00 00 00
1.5 : 40 15 00 00 00 00 00 00
-2 : C0 20 00 00 00 00 00 00

Le premier octet sert à déterminer la virgule et le signe
Si sa valeur (décimale) est supérieur à 128 alors le nombre est négatif

J'ai réalisé cette fonction pour obtenir le nombre décodé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
	def readFlt(self,rec) :
		flt , b , expo , sgn = '' , ord(rec[0:1]) , 64 , 1
		rec=rec[1:]
		if b > 128 : expo , sgn = 192 , -1
		for i in range(7) :	flt += ('0' + (hex(ord(rec[i:i+1])) [2:]))[-2:]
		flt = str(int(flt[::-1]))[::-1].strip() 
		if Decimal(flt) == 0 : return '0.0'
		return str(sgn * Decimal(flt) * 10 ** Decimal(str(b - (expo + len(flt) - 1))  ) )
Ca fonctionne bien mais c'est assez lent lorsque je fais des milliers de lectures des enregistrements.
Je remarque que c'est cette fonction qui prend énormément de temps.
Y a t il une façon (des façons) d'optimiser ceci?

Merci