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

-
- User
- Beiträge: 5
- Registriert: Dienstag 16. August 2005, 09:03
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!
muss mal noch ein bisschen probieren aber danke für den tipp!
-
- User
- Beiträge: 5
- Registriert: Dienstag 16. August 2005, 09:03
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...
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Code: Alles auswählen
struct.unpack('d','AÏ À§Ñÿ') #'d' -> double
oder
struct.unpack('d',f.read(8))
Gruss
-
- User
- Beiträge: 5
- Registriert: Dienstag 16. August 2005, 09:03
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!
vielen dank für die hilfe!