Как использовать hex () без 0x в Python?


93

hex()Функция питона, ставит ведущие символы 0xперед номером. Есть ли способ сказать, что НЕ ставить их? Так 0xfa230и будет fa230.

Код

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')

2
Вы можете нарезать 0x.
Ашвини Чаудхари,

3
@AshwiniChaudhary Я думаю, он, по сути, спрашивает, как нарезать 0x
Mine

Ответы:



58

Используйте этот код:

'{:x}'.format(int(line))

он также позволяет вам указать количество цифр:

'{:06x}'.format(123)
# '00007b'

Для Python 2.6 используйте

'{0:x}'.format(int(line))

или

'{0:06x}'.format(int(line))

8
Использовать эту format()функцию проще, вы не используете никаких шаблонов, а только форматирование. Если весь ваш шаблон содержит это {:..}для одного значения, перейти format(value, '..')вместо этого.
Мартейн Питерс

Используется f.write('{:x}'.format(hex(int(line)))), там написаноValueError: zero length field name in format
Махмуд

formatнужен int, а не строка:f.write('{:x}'.format(int(line)))
eumiro

17

Вы можете просто написать

hex(x)[2:]

чтобы удалить первые два символа.


3
Это небезопасно от будущих изменений вывода.
Стефано Санфилиппо

2
Также в Python 2 с длинными числами он производит странный вывод:>>> hex(3735928559)[2:] 'deadbeefL'
jamylak

@esseks: Я сомневаюсь, что они изменят выходной формат до следующего крупного релиза. В любом случае у вас будут другие несовместимости.
Янус Трольсен

9
Это сломается, если xбудет отрицательным.
DSM


7

Форматирование строк в старом стиле:

In [3]: "%02x" % 127
Out[3]: '7f'

Новый стиль

In [7]: '{:x}'.format(127)
Out[7]: '7f'

Использование заглавных букв в качестве символов формата дает прописные шестнадцатеричные числа

In [8]: '{:X}'.format(127)
Out[8]: '7F'

Документы здесь.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.