Como usar hex () sem 0x em Python?

94

A hex()função em python coloca os caracteres principais 0xantes do número. Existe alguma maneira de dizer para NÃO colocá-los? Assim 0xfa230será fa230.

O código é

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')
Mahmood
fonte
2
Você pode cortar o 0x.
Ashwini Chaudhary
3
@AshwiniChaudhary Acho que ele está essencialmente perguntando como fatiar 0x
Mina de

Respostas:

187
>>> format(3735928559, 'x')
'deadbeef'
Jamylak
fonte
35
Tenho que amar o velho deadbeefexemplo. E format()é a melhor maneira de fazer isso.
Martijn Pieters
Podemos mudar para c0ffee = format(12648430, 'x'). Em Python3.8 é o exemplo padrão para hexadecimal.
Aprendi em
@Justlearnedit Esse é legal, acho que é perfeito onde está em seu comentário: P
jamylak
59

Use este código:

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

ele permite que você especifique um número de dígitos também:

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

Para Python 2.6, use

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

ou

'{0:06x}'.format(int(line))
eumiro
fonte
8
Usar a format()função é mais fácil, você não está usando nenhuma funcionalidade de template, apenas formatação. Se tudo que o seu modelo contém for {:..}para um valor, vá para format(value, '..').
Martijn Pieters
Usando f.write('{:x}'.format(hex(int(line)))), dizValueError: zero length field name in format
mahmood
formatprecisa de um int, não de uma string:f.write('{:x}'.format(int(line)))
eumiro
18

Você pode simplesmente escrever

hex(x)[2:]

para remover os primeiros dois personagens.

Guillaume Lemaître
fonte
3
Isso não é seguro contra alterações futuras da saída.
Stefano Sanfilippo
2
Também em Python 2 com números longos, produz resultados estranhos:>>> hex(3735928559)[2:] 'deadbeefL'
jamylak
@esseks: Duvido que eles mudem o formato de saída antes do próximo lançamento principal. Você terá outras incompatibilidades de qualquer maneira.
Janus Troelsen
9
Isso vai quebrar se xfor negativo.
DSM de
14

Python 3.6+:

>>> i = 240
>>> f'{i:02x}'
'f0'
Gringo Suave
fonte
7

Formatação de string de estilo antigo:

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

Novo estilo

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

Usar letras maiúsculas como caracteres de formato resulta em hexadecimal maiúsculo

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

Os documentos estão aqui.

Msvalkon
fonte