Wie kann ich denn das erreichen: 0x12345678 -> [0x12, 0x34, 0x56, 0x78] ?
Ich hab schon ein wenig mit divmod probiert, komme aber nicht zum richtigen Ergebnis ;(
0x12345678 -> [0x12, 0x34, 0x56, 0x78]
Code: Alles auswählen
In [481]: [hex(ord(c)) for c in struct.pack('>i', 0x12345678)]
Out[481]: ['0x12', '0x34', '0x56', '0x78']
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab das hier:
Ausgabe:
Also eigentlich richtig. Aber recht umständlich, oder nicht?
Code: Alles auswählen
dividend = 0x12345678
print hex(dividend)
high_word, low_word = divmod(dividend, 0x10000)
low_byte1, high_byte1 = divmod(high_word, 0x100)
low_byte2, high_byte2 = divmod(low_word, 0x100)
print hex(low_byte1), hex(high_byte1), hex(low_byte2), hex(high_byte2)
Code: Alles auswählen
0x12345678
0x12 0x34 0x56 0x78
Naja was heisst umständlich, recht explizit ausgeschrieben würd ich sagen, da es auch kürzer geht:
Code: Alles auswählen
def bytesplit(n):
while n:
yield n & 255
n >>= 8
list(hex(i)for i in bytesplit(0x12345678))[::-1]
So:
Code: Alles auswählen
>>> [0x12345678>>(a<<3)&0xff for a in (3,2,1,0)]
[18, 52, 86, 120]
@Sirius3
Code: Alles auswählen
[hex(0x12345678>>(a<<3)&0xff) for a in (3,2,1,0)]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das nehme ich! Danke!fail hat geschrieben:@Sirius3Code: Alles auswählen
[hex(0x12345678>>(a<<3)&0xff) for a in (3,2,1,0)]
Code: Alles auswählen
In [484]: [hex(0x12345678 >> (i * 8) & 0xff) for i in reversed(xrange(4))]
Out[484]: ['0x12', '0x34', '0x56', '0x78']
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Dafür habe ich das gebraucht: https://github.com/jedie/DragonPy/commi ... 2f9972d62f
Danke euch allen!
Danke euch allen!