2013-02-03 12 views
46

Come convertire i decimali in esadecimale nel seguente formato (almeno due cifre, senza riempimento, senza prefisso 0x)?Python Esadecimale

Input: 255 uscita: ff

Input: 2 uscita: 02

Ho provato hex(int)[2:] ma sembra che visualizza il primo esempio, ma non la seconda.

+0

[che cosa hai provato?] (http://whathaveyoutried.com) Perché ho downvoted questa domanda: http://meta.stackexchange.com/a/149138/133242 –

+0

Ho provato hex (int) [2 :] ma sembra che mostri il primo esempio ma non il secondo. –

+0

Ho capito! Grazie –

risposta

104

Utilizzare format() function con un formato '02x'.

>>> format(255, '02x') 
'ff' 
>>> format(2, '02x') 
'02' 

La parte 02 dice format() usare almeno 2 cifre e da utilizzare zeri pad a lunghezza, x significa minuscole esadecimale.

Il Format Specification Mini Language si X per uscita esadecimale maiuscolo dà anche, e si può precedere l'ampiezza del campo con # per includere un 0x o 0X prefisso (a seconda del tempo che si è utilizzato x o X come formattatore). Basta prendere in considerazione che è necessario regolare la larghezza del campo per consentire quelli extra 2 caratteri:

>>> format(255, '02X') 
'FF' 
>>> format(255, '#04x') 
'0xff' 
>>> format(255, '#04X') 
'0XFF' 
+0

Grazie! Buona spiegazione –

+0

Sto riscontrando un problema in cui il prefisso esadecimale avrà una "X" maiuscola se si imposta il formato per utilizzare l'output esadecimale maiuscolo. Questo non sembra essere il caso nel tuo esempio. È solo un problema con la mia versione locale di Python? Sto usando la versione 2.7.9. – jwp36

+0

@ jwp36: no, è stato un errore nella mia risposta, ora corretto. Mie scuse. –

15

Credo che questo sia ciò che si vuole:

>>> def twoDigitHex(number): 
...  return '%02x' % number 
... 
>>> twoDigitHex(2) 
'02' 
>>> twoDigitHex(255) 
'ff' 
-7

La prima risposta è la migliore, ma ho una risposta arcaica ma funzionale

>>> "".join(list(hex(255))[2:]) 
'ff' 
+2

Nella stessa vena di un'altra risposta, questo non è zero pad. Ad esempio, "" ".join (list (hex (2)) [2:])' restituisce '' 2'', non ''02''. – therealrootuser

+1

Questo è sinonimo di 'hex (int) [2:]' dalla domanda. Perché fai una lista solo per unirti di nuovo? – wjandrea

+0

Perché postare questa risposta se si è già d'accordo sul fatto che ce ne sia uno migliore? – ryry1985