2013-02-03 10 views
46

Jak przekonwertować znaki dziesiętne na szesnastkowy w następującym formacie (co najmniej dwie cyfry, zero wyściełane, bez przedrostka 0x)?Python Hexadecimal

Wejście: 255 wyjściowa: ff

Wejście: 2 wyjściowa: 02

Próbowałem hex(int)[2:] ale wydaje się, że wyświetla pierwszy przykład, ale nie drugi.

+0

[Co próbowałeś?] (http://whathaveyoutried.com) Dlaczego downvoted to pytanie: http://meta.stackexchange.com/a/149138/133242 –

+0

Próbowałem hex (int) [2 :], ale wygląda na to, że wyświetla pierwszy przykład, ale nie drugi. –

+0

Mam to! Dzięki –

Odpowiedz

104

Użyj formatu format() function w formacie '02x'.

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

02 część mówi format() stosowanie co najmniej 2 cyfry i użyć zer na IT długości wkładki, x oznacza małą szesnastkowo.

Format Specification Mini Language daje ci również X dla wielkiej mocy hex i można poprzedzić szerokość pola z # dołączyć 0x lub 0X prefiks (w zależności od wether użyłeś x lub X jako formater). Wystarczy wziąć pod uwagę, że trzeba zmienić szerokość pola, aby umożliwić tych dodatkowych 2 znaków:

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

Dzięki! Dobre wytłumaczenie. –

+0

Mam problem, w którym szesnastkowy prefiks będzie miał duże "X", jeśli ustawi format tak, aby używał dużych liter szesnastkowych. Nie wydaje się, że tak jest w twoim przykładzie. Czy to tylko problem z moją lokalną wersją Pythona? Używam wersji 2.7.9. – jwp36

+0

@ jwp36: nie, to był błąd w mojej odpowiedzi, teraz poprawiony. Przepraszam. –

15

myślę, że to, co chcesz:

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

Pierwsza odpowiedź jest najlepszy, ale mam odpowiedź archaiczny, ale funkcjonalna

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

W tym samym duchu, co inna odpowiedź, nie zeruje padu. Na przykład '" ".join (list (hex (2)) [2:])" zwraca wartość "2", a nie "02". – therealrootuser

+1

To jest synonimem 'hex (int) [2:]' od pytania. Dlaczego tworzysz listę, aby ponownie do niej dołączyć? – wjandrea

+0

Po co pisać tę odpowiedź, jeśli już zgodzisz się, że jest lepszy? – ryry1985