Seite 1 von 1

float-nummern problem

Verfasst: Dienstag 16. August 2005, 09:32
von morbidorbid
hallo ich habe folgendes problem:
in einer externen datei habe ich an einer bestimmten stelle eine zeichenkette in ascii die ich auslese. diese zeichenkette enthält eine float-zahl im double(64bit-format). sie ist allerdings im "ursprünglichen" float-format(mit 64 bit) darin gespeichert heisst:
bit 0-51 ist die mantisse
bit 52-62 ist der exponent
bit 63 ist das vorzeichen

darstellung des ausschnitts:
in der datei in ascii:
AÏ..À§Ñÿ
in hex ist das:
41 cf 09 17 c0 a7 d1 ff

in den 64 bits dieser 16hexzahlen ist die floatzahl wie oben beschrieben gespeichert. da ich ja nich einfach den dezimalwert dieser zahl nehmen und das in float konvertieren kann(ergibt unsinn und nicht den wert), weiß ich nicht wie ich diese zahl in python bekomme!mit einem converter auf einer internetseite hab ich den wert schon rausbekommen(der wert ist: 1041379201.3110961), aber ich brauchs jetzt selber für mein programm... zum weiterrechnen.adresse des konverters: http://babbage.cs.qc.edu/courses/cs341/ ... hex64.html

Verfasst: Dienstag 16. August 2005, 10:43
von CM
Hoi

Ich kann Dein Beispiel nicht nachvollziehen. Wenn ich Deinen Beispielstring als binären Datenblock auffasse kommt bei mir ein andere hex-Repräsentation heraus. Bist Du sicher, daß Dein Beispiel korrekt ist?
Aber im Allgemeinen dürfte Dir das binascii-Modul weiterhelfen.

Gruß,
Christian

Verfasst: Dienstag 16. August 2005, 10:57
von morbidorbid
hallo
du kannst es mal in dieser form probieren:
AÏ À§Ñÿ
das ganze ist blöd darzustellen da es aus einem hexeditor kopiert ist, aber so ist die darstellung korrekt...
aus dem hes editor hab ich auch die umrechung, die ich genauso mit python bereits erhalten habe, wenn ich mittels binascii den asciistring in hex umwandle.
erstaunlicherweise kann ich die daten von ascii nach hex mittels dem binascii.b2a_hex() befehl umwandeln - heisst: python nimmt ascii und rechnet automatisch binär mit den werten und gibt mir dann den hexwert. es macht also einen schritt automatisch für mich (asci erst in binär und dann in hex) :)

Verfasst: Dienstag 16. August 2005, 10:58
von rayo
Hi

Sust du vielleicht das Modul struct? da gibts umwandlungen von C Datentypen nach Python (als Rawdata in String nach Float)

Gruss

Verfasst: Dienstag 16. August 2005, 11:19
von morbidorbid
kann sein dass das modul dass richtige ist...da ich aber python neuling bin weiss ich net so recht wie ich den spaß anwenden musss. habs grade 15 min erfolglos probiert...
muss mal noch ein bisschen probieren aber danke für den tipp!

Verfasst: Dienstag 16. August 2005, 11:26
von morbidorbid
ich komm nicht weiter... ich weiß nicht welche befehle ich benutzen muss um den hex string (41cf0917c0a7d1ff) mittels struct.unpack(fmt,string) zu entcoden... (weiss also nicht was ich für fmt und string einsetzen muss...

Verfasst: Dienstag 16. August 2005, 11:39
von rayo

Code: Alles auswählen

struct.unpack('d','AÏ À§Ñÿ') #'d' -> double

oder

struct.unpack('d',f.read(8))
so sollte es eignentlich gehen


Gruss

Verfasst: Dienstag 16. August 2005, 12:25
von morbidorbid
ok jetzt habe ich den richtigen wert ... ich muuste bloß noch als zusatz big-endian als byteordnung hinzufügen...
vielen dank für die hilfe!