2012-02-09 16 views
77

Mam pewien kod Perla, w którym funkcja hex() konwertuje dane szesnastkowe na dziesiętne. Jak mogę to zrobić na Python?Jak przekonwertować hex na dziesiętny w Pythonie?

+1

Czy jesteś pewien, że chcesz do konwersji danych do „po przecinku”? Funkcja Perl po prostu konwertuje łańcuch szesnastkowy na liczbę całkowitą, a nie na liczbę dziesiętną. –

+0

@SvenMarnach Używam tego podręcznika perl hex() http://www.misc-perl-info.com/perl-hex.html "Ta funkcja: ma jako argument łańcuch szesnastkowy (lub wyrażenie, które po przetworzeniu zwróci łańcuch szesnastkowy) zwróci dziesiętną odpowiadającą wartość " –

+1

@Sir D: ten artykuł jest bardzo źle sformułowany. Jak mówi Sven, 'hex' konwertuje łańcuch szesnastkowy na wartość całkowitą (która jest przechowywana wewnętrznie w systemie binarnym, ale jest po prostu wartością numeryczną bez podstawy). Wywołanie 'print' przekształca tę wartość w łańcuch dziesiętny i drukuje ją. – Borodin

Odpowiedz

139

Jeśli przez "dane hex" masz na myśli ciąg postaci

s = "6a48f82d8e828ce82b82" 

można użyć

i = int(s, 16) 

przekonwertować go na liczbę całkowitą i

str(i) 

do konwersji do ciągu dziesiętnego.

+14

Cholera, kocham Pythona. –

+0

Dla ujemnej liczby heksadecymalnej, to nie działa. –

+0

@EricWang Działa to doskonale w przypadku liczb ujemnych: http://ideone.com/IHOQvp. Chyba, że ​​masz liczbę ujemną zakodowaną w formacie uzupełnienia o dwóch szerokościach stałych, ale to byłby inny problem niż to, o co tutaj pytano. (Podpowiedź: użyj w tym przypadku modułu 'struct'.) –

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

lub

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

Read the docs.

+2

int (0xff) zrobi to, co trzeba. Wymagane jest tylko jawne podłoże, jeśli jest przekazywane jako ciąg znaków. – cassm

12

Można używać dosłownego eval:

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

Albo po prostu określić zasady jako argument int:

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

To jest idealne! =] – GalDude33

Powiązane problemy