Python шістнадцятковий


76

Як перетворити десятковий шістнадцятковий формат у наступному форматі (принаймні дві цифри, заповнені нулем, без префікса 0x)?

Вхід: 255 Вихід:ff

Вхід: 2 Вихід:02

Я спробував, hex(int)[2:]але здається, що він відображає перший приклад, але не другий.


1
Що ви пробували? Чому я підтримав це питання: meta.stackexchange.com/a/149138/133242
Matt Ball

Я спробував hex (int) [2:], але, здається, він відображає перший приклад, але не другий.
VikkyB

Питання та відповіді менш корисні без чіткого висловлення того, що конкретно означає "наступний формат". Можливо, "принаймні дві цифри, заповнені нулем, без префікса 0x"?
LarsH

Можливий копія функції Декорування шістнадцяткового
тексту

Відповіді:


151

Використовуйте format()функцію з '02x'форматом.

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

02Частина говорить format()використовувати , щонайменше , 2 цифри і використовувати нулі , щоб доповнити його до довжини, xзасіб малими шестнадцатеричное.

Формат Специфікація Mini Мова також дає вам в Xверхньому регістрі виведення шістнадцятирічного, і ви можете випередити поле шириною з , #щоб включати 0xабо 0Xпрефікс ( в залежності від кастрований баран ви використовували xабо Xяк форматуванням). Просто візьміть до уваги, що вам потрібно відрегулювати ширину поля, щоб врахувати ці додаткові 2 символи:

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

У мене проблема, коли шістнадцятковий префікс матиме велику літеру "X", якщо встановити формат для використання шістнадцяткового виводу у верхньому регістрі. Здається, у вашому прикладі це не так. Це лише проблема з моєю локальною версією Python? Я використовую версію 2.7.9.
jwp36

@ jwp36: ні, це була помилка у моїй відповіді, тепер виправлена. Мої вибачення.
Мартін Пітерс

3
вказати формат у вихідному рядку'{:02x}'.format(255)
JuanPablo

1
@JuanPablo: робіть це лише у більшому рядку . Використання str.format()лише того, щоб проаналізувати один слот, змушує Python робити додаткову роботу (оскільки всередині це все ще використовується format(255, '02x')для цього одного слота).
Мартін Пітерс


-8

Іншим рішенням є:

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

Можливо, архаїчна відповідь, але функціональна.


2
Точно так само, як і інша відповідь, це не дорівнює нулю. Наприклад, "".join(list(hex(2))[2:])оцінює '2', а не '02'.
therealrootuser

1
Це синонім hex(int)[2:]запитання. Чому ви складаєте список, аби приєднатися до нього ще раз?
wjandrea

Навіщо публікувати цю відповідь, якщо ви вже погоджуєтесь, що є краща?
ryry1985
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.