Hallo Leute,
Ich bin noch ein absoluter Neuling in Python und stehe jetzt vor dem Problem einen hex Wert in eine float Wert umzuwandeln.
Der Wert den ich umwandeln will sieht so aus 4369074c , der passende float dazu ist 233.02850341796875.
Wenn ich jetzt per Hand \x43\x69\x07\x4c draus mache bekomme ich mit unpack('>f' , ... auch den richtigen Wert. Ich hab schon versucht mit list() die einzelnen Zeichen zu extrahieren und mir den richtigen String zusammen zu bauen, (mit \x ) bekomme mit diesem String aber nur Fehlermeldungen.
Was mache ich hier falsch, das kann doch eigentlich nicht so schwer sein.
probleme mit struct.unpack() und float
@Christian L: Die Darstellung einer Zeichenkette mit ``\x`` ist eben nur das: eine Darstellung. Die Zeichenkette '\x40' enthält weder einen Backslash, noch ein 'x' noch eine '4' oder eine '0', sondern nur *ein* Byte/Zeichen nämlich das '@' (wenn man sie als ASCII interpretiert):
Die Schreibweise ist für Zeichenkettenliterale in Python-Quelltext. Es funktioniert nicht eine Zeichenkette die tatsächlich diese Sequenzen als Zeichenfolge enthält zu erstellen und zu hoffen das aus magische Weise aus den jeweils vier Zeichen, also auch vier Bytes, jeweils ein Zeichen/Byte wird.
Du hast eine Zeichenkette mit 8 Zeichen aus denen Du vier Bytes machen musst. Schau mal in das `binascii`-Modul in der Standardbibliothek, da gibt es entsprechende Funktionen.
Code: Alles auswählen
In [56]: s = '\x40'
In [57]: len(s)
Out[57]: 1
In [58]: 'x' in s
Out[58]: False
In [59]: print s
@
In [60]: s == '@'
Out[60]: True
In [61]: s
Out[61]: '@'
Du hast eine Zeichenkette mit 8 Zeichen aus denen Du vier Bytes machen musst. Schau mal in das `binascii`-Modul in der Standardbibliothek, da gibt es entsprechende Funktionen.
-
- User
- Beiträge: 2
- Registriert: Mittwoch 21. November 2012, 05:34
danke für die hinweise.
genau das hab ich gesucht.
Code: Alles auswählen
>>> import struct , binascii
>>> x= '4369074c'
>>> struct.unpack('>f',binascii.unhexlify(x))
(233.02850341796875,)