2013-05-07 10 views
44

La funzione hex() in python, pone i caratteri iniziali 0x davanti al numero. C'è comunque da dire NON per metterli? Quindi 0xfa230 sarà fa230.Come usare hex() senza 0x in Python?

Il codice è

import fileinput 
f = open('hexa', 'w') 
for line in fileinput.input(['pattern0.txt']): 
    f.write(hex(int(line))) 
    f.write('\n') 
+1

È possibile suddividere il '0x'. –

risposta

93
>>> format(3735928559, 'x') 
'deadbeef' 
+24

Devi amare l'esempio di "deadbeef". E 'format()' è il modo migliore per farlo. –

+2

L'argomento nel formato dovrebbe essere 'int'. Grazie al formato – mahmood

+2

(2976579765, "x") – Speccy

35

di questo codice:

'{:x}'.format(int(line)) 

permette di specificare un numero di cifre troppo:

'{:06x}'.format(123) 
# '00007b' 

Per Python 2.6 uso

'{0:x}'.format(int(line)) 

o

'{0:06x}'.format(int(line)) 
+5

L'uso della funzione 'format()' è più semplice, non si utilizza alcuna funzionalità di template, solo la formattazione. Se tutto il tuo modello contiene '{: ..}' per * un * valore, sposta invece su 'format (value, '..')'. –

+0

Usando 'f.write ('{: x}'. Format (hex (int (line)))', si dice 'ValueError: nome campo lunghezza zero in formato' – mahmood

+0

' format' ha bisogno di un int, non di una stringa : 'f.write ('{: x}'. format (int (line)))' – eumiro

4

Vecchio stringa di stile di formattazione:

In [3]: "%02x" % 127 
Out[3]: '7f' 

Nuovo stile

In [7]: '{:x}'.format(127) 
Out[7]: '7f' 

Utilizzando lettere maiuscole come caratteri in formato esadecimale cede maiuscolo

In [8]: '{:X}'.format(127) 
Out[8]: '7F' 

Docs sono qui.

8

Si può semplicemente scrivere

hex(x)[2:] 

per ottenere i primi due caratteri rimossi.

+0

Questo non è sicuro per le future modifiche dell'output. –

+1

ma è stato facile .... – mahmood

+1

Anche in Python 2 con numeri lunghi produce una strana uscita: '>>> hex (3735928559) [2:]' ''deadbeefL'' – jamylak