Wie einen Hexwert zerlegen ?

20/03/2009 - 09:49 von stefan | Report spam
Hallo Gruppe,

ich als Python Anfànger hab mal wieder ein Problem und keinen
Durchblick :)

Ich will das aktuelle Datum in einen Hex Wert wandeln ABER im Format
[0x00, 0x00, 0x00, 0x00] also als Tuppel.


rd = hex(int(mktime(gmtime())))

liefert mir :
0x49c34976

wie kann ich rd aufteilen, so was ich mehrer Variablen habe :
a = 0x49
b = 0xc3
c = 0x49
d = 0x76

Beim Versuch das so zu lösen :

a = "0x"+rd[2]+rd[3]
b = "0x"+rd[4]+rd[5]
c = "0x"+rd[6]+rd[7]
d = "0x"+rd[8]+rd[9]

erhalte ich einen String und keinen Hex Wert.

Ich muss einen Hex Tuppel erstellen :
apdu = [0x00, 0xd6, 0x00, 0x00, 0x04, a, b, c, d]

Leider sieht das Ergebniss dann so aus :

apdu [0, 214, 0, 0, 4, '0x49', '0xc3', '0x4a', '0xf9']

Stefan
 

Lesen sie die antworten

#1 Diez B. Roggisch
20/03/2009 - 10:10 | Warnen spam
stefan schrieb:
Hallo Gruppe,

ich als Python Anfànger hab mal wieder ein Problem und keinen
Durchblick :)

Ich will das aktuelle Datum in einen Hex Wert wandeln ABER im Format
[0x00, 0x00, 0x00, 0x00] also als Tuppel.



Das ist kein Tupel, sondern eine Liste. Aber das nur am Rande.


rd = hex(int(mktime(gmtime())))

liefert mir :
0x49c34976

wie kann ich rd aufteilen, so was ich mehrer Variablen habe :
a = 0x49
b = 0xc3
c = 0x49
d = 0x76

Beim Versuch das so zu lösen :

a = "0x"+rd[2]+rd[3]
b = "0x"+rd[4]+rd[5]
c = "0x"+rd[6]+rd[7]
d = "0x"+rd[8]+rd[9]

erhalte ich einen String und keinen Hex Wert.



Es gibt keine "Hex-Werte".

Es gibt integer Werte, und es gibt Strings. Und man kann integer-Werte
in ein Zahldarstellung als String ueberfuehren, die zb dem
hexadezimalsystem entstammt. Dazu nimmt man die hex-funktion, oder man
benutzt den format-specifier "%x"

Also so:

print "%x" % 14






c

Ausserdem gibt es eine Besonderheit bei Strings: die repr-funktion,
welche einem zB bei einem string, der nicht-ascii-werte enthaelt, diese
als hex-darstellung ausgibt:

print repr("\14")






'\x0c'


Aber deswegen ist "\14" immer noch ein string.


Ich muss einen Hex Tuppel erstellen :
apdu = [0x00, 0xd6, 0x00, 0x00, 0x04, a, b, c, d]

Leider sieht das Ergebniss dann so aus :

apdu [0, 214, 0, 0, 4, '0x49', '0xc3', '0x4a', '0xf9']



Das ist eine Mischung aus integern & strings. Ich wuerde mal vermuten
was du wirklich willst ist sowas hier:

a = (rd >> 24) & 255
b = (rd >> 16) & 255
c = (rd >> 8) & 255
d = rd & 255

Damit sind die verschiedenen Bytes aus dem Wert extrahiert.


Diez

Ähnliche fragen