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.