Hex string in Nummer umwandeln

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
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Tag allesamt. Bin noch ziemlich unerfahren, was python angeht, also vergebt bitte die warscheinlich doofe Frage. Ich schreibe zur Zeit ein Programm zum Auslesen bestimmter Daten von einer Datei. Die benötigten Daten haben unterschiedliche Länge, welche direkt davor angegeben ist. Beim Auslesen schaut diese Länge z.B. so aus: '\xab\x01\x00\x00', ist daher ein string. Diesen string brauche ich als Nummer, nur genau das krieg ich das nicht hin. Int() geht ja nicht, die will ja nen integer als input. Wie krieg ich das dann hin?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

rumilmirion hat geschrieben:Diesen string brauche ich als Nummer,
Hi rumilmirion!

Meinst du so etwas?

Code: Alles auswählen

s = "\xab\x01\x00\x00"
for char in s: 
    print ord(char)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Hmm...das funktioniert zwar theoretisch, aber wie ich gerade feststellte, ist das Format meiner Datei da etwas komisch. Den string '\xab\x01\x00\x00' hab ich nicht erfunden, der kam wirklich dabei raus. Nach dem Code würde man ja 127+1 erhalten...hab in nem hex editor nachgeschaut, da ist die Länge der Daten die ich will 427 bytes...was laut hex() 0x1ab ist. Also müsste man aus '\xab\x01\x00\x00' \x1ab machen. So weit schon mal danke, wenigstens weiss ich jetzt, was mit dieser Datei los ist. Irgendeine Idee, wie ich den Rest machen könnte und die wirkliche Länge rauskriegen könnte?
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

0x1ab ist ein Word, also zwei Byte. Und Intel speichert diese im Little-Endian-Format. (Lowest byte first)

Dementsprechend wird 0x1ab als 0xab 0x01 abgespeichert. Und dies ist in deinem String ja auch der Fall.

Für das, was du vorhast, gibt es struct
rumilmirion
User
Beiträge: 34
Registriert: Mittwoch 3. Mai 2006, 12:09

Ah ja, so geht das also. Danke vielmals!
Antworten