Як використовувати hex () без 0x у Python?


92

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
mahmood

formatпотрібен int, а не рядок:f.write('{:x}'.format(int(line)))
eumiro

17

Ви можете просто писати

hex(x)[2:]

щоб видалити перші два символи.


3
Це не є безпечним від майбутніх змін випуску.
Стефано Санфіліппо

2
Також у Python 2 з довгими числами він видає дивний >>> hex(3735928559)[2:] 'deadbeefL'
витік

@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.