2013-04-08 13 views

risposta

21

Questo sta accadendo perché hex() non includerà alcun zeri iniziali, ad esempio:

>>> hex(15)[2:] 
'f' 

per essere sicuri di ottenere sempre due personaggi, è possibile utilizzare str.zfill() per aggiungere uno zero in caso di necessità:

>>> hex(15)[2:].zfill(2) 
'0f' 

Ecco wha t sarebbe simile nel codice:

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:].zfill(2) 
+0

'per i in b [0x15c: 0x15f]: \t \t h = hex (ord (i)) [2:] \t \t se len (h) = 2: h = '0' + h \t \t fc + = h; ' Un amico ha detto che funzionerà – thethiny

+0

Finalmente, un esempio funzionante correttamente spiegato su thi S ! – monojohnny

+0

Non direi che è stato spiegato correttamente e non sono il migliore per spiegarlo. Ignora gli zero iniziali perché non significano nulla rispetto al valore decimale dei valori esadecimali. Indicano il numero di byte utilizzati dai valori. 15 = f. 0f = 15 perché 0 + 15 è 15 –

2
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]] 

uso una stringa di formato "%2x" dice di formattare per essere 2 caratteri estesi, allo stesso modo "%02x" dice di pad con 0 di

nota che questo sarebbe ancora togliere lo 0 iniziale del dalle cose con più di 2 valori esadecimali es .: "0x%02x"%0x0055 => "0x55"

0

È ancora solo una rappresentazione grafica per la vostra convenienza.
Il valore non viene effettivamente rimosso dai dati, ma solo accorciato visivamente.

Descrizione completa qui e perché è o perché non è importante: Why are hexadecimal numbers prefixed with 0x?

+1

No, è spogliato dai dati, ho provato la stampa l'output, e dà valori diversi, 04F è il modo troppo diverso da quello 00040f – thethiny

11
>>> map("{:02x}".format, (10, 13, 15)) 
['0a', '0d', '0f'] 
+3

Questo è waaaaay più pythonic della risposta più upvoted! +1! – Antonvh

Problemi correlati