2012-02-09 18 views
77

Ho un codice Perl in cui la funzione hex() converte i dati esadecimali in decimale. Come posso farlo su Python?Come posso convertire da esadecimale a decimale in Python?

+1

Sei sicuro che si desidera convertire i dati in "decimali"? La funzione Perl converte semplicemente una stringa esadecimale in un numero intero, non in una stringa decimale. –

+0

@SvenMarnach uso questo manuale perl hex() http://www.misc-perl-info.com/perl-hex.html "Questa funzione: ha come argomento una stringa esadecimale (o un'espressione che dopo la valutazione restituirà una stringa esadecimale) restituirà il valore decimale corrispondente " –

+1

@Sir D: quell'articolo è molto mal scritto. Come dice Sven, 'hex' converte una stringa esadecimale in un valore intero (che è memorizzato internamente in binario ma è essenzialmente semplicemente un valore numerico senza una base). La chiamata a 'print' converte quel valore in una stringa decimale e lo stampa. – Borodin

risposta

139

se per "dati esadecimali" Vuoi dire che una stringa della forma

s = "6a48f82d8e828ce82b82" 

è possibile utilizzare

i = int(s, 16) 

per convertirlo in un intero e

str(i) 

convertire a una stringa decimale.

+14

Accidenti, io amo Python. –

+0

Per un numero esadecimale negativo, questo non funziona. –

+0

@EricWang Funziona perfettamente per i numeri negativi: http://ideone.com/IHOQvp. A meno che tu non abbia un numero negativo codificato in formato a complemento a larghezza fissa, ma questo sarebbe un problema diverso da quello che è stato chiesto qui. (Suggerimento: usa il modulo 'struct' in questo caso.) –

26
>>> int("0xff", 16) 
255 

o

>>> int("FFFF", 16) 
65535 

Read the docs.

+2

int (0xff) farà la cosa giusta. Richiede solo una base esplicita se è passato come una stringa. – cassm

12

si potrebbe usare un eval letterale:

>>> ast.literal_eval('0xdeadbeef') 
3735928559 

O semplicemente specificare la base come argomento di int:

>>> int('deadbeef', 16) 
3735928559 
+0

Questo è perfetto! =] – GalDude33

Problemi correlati