2014-04-13 9 views
6

Credo di fraintendere qualcosa che probabilmente dovrebbe essere semplice.Come avere semplicemente la stampa python " xaa xbb xcc xdd" come 0xddccbbaa?

Sto tentando di accettare argomenti passati a uno script python. Il tipo di argomento che mi aspetto è da qualche parte lungo le linee di "\xaa\xbb\xcc\xdd" e continua a convertirlo in binario (credo?) Invece di consentirmi di stamparlo esattamente come è stato passato.

Come posso ottenere questo per fare ciò che sto cercando di fare? Alla fine mi piacerebbe prendere questo ed essere in grado di convertirlo in qualcosa come 0xddccbbaa, ma suppongo che mi piacerebbe almeno ottenere il primo passo completato dall'essere in grado di interpretarlo.

Come, non voglio stampare \x75 per stampare un u. Voglio essere in grado di interpretare \x75 come \x75. Qualche modo semplice per farlo?

risposta

8

Alcune manifestazioni con struct:

x = b"\xaa\xbb\xcc\xdd" 

import struct 

struct.unpack('I',x) 
Out[3]: (3721182122,) 

y = struct.unpack('I',x) 

y[0] 
Out[5]: 3721182122 

hex(y[0]) 
Out[6]: '0xddccbbaa' 

Essenzialmente: trattare la bytestring come little-endian 4 byte intero senza segno ('I'). struct gestisce trasformandolo in un int ed è possibile utilizzare hex per ottenere una rappresentazione di stringa in esadecimale (o utilizzare qualcosa come '{:x}'.format(y[0]), se si preferisce)

+0

GRAZIE! Questo ha risolto quello che stavo cercando. Non posso credere che non potrei capirlo. Mille grazie amico! – user3528254