float-nummern problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
morbidorbid
User
Beiträge: 5
Registriert: Dienstag 16. August 2005, 09:03

Dienstag 16. August 2005, 09:32

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 16. August 2005, 10:43

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
morbidorbid
User
Beiträge: 5
Registriert: Dienstag 16. August 2005, 09:03

Dienstag 16. August 2005, 10:57

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) :)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 16. August 2005, 10:58

Hi

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

Gruss
morbidorbid
User
Beiträge: 5
Registriert: Dienstag 16. August 2005, 09:03

Dienstag 16. August 2005, 11:19

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!
morbidorbid
User
Beiträge: 5
Registriert: Dienstag 16. August 2005, 09:03

Dienstag 16. August 2005, 11:26

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...
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 16. August 2005, 11:39

Code: Alles auswählen

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

oder

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


Gruss
morbidorbid
User
Beiträge: 5
Registriert: Dienstag 16. August 2005, 09:03

Dienstag 16. August 2005, 12:25

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!
Antworten