Wie verwende ich hex () ohne 0x in Python?

86

Die hex()Funktion in Python setzt die führenden Zeichen 0xvor die Zahl. Gibt es sowieso zu sagen, sie NICHT zu setzen? So 0xfa230wird es sein fa230.

Der Code ist

import fileinput
f = open('hexa', 'w')
for line in fileinput.input(['pattern0.txt']):
   f.write(hex(int(line)))
   f.write('\n')
Mahmood
quelle
2
Sie können die schneiden 0x.
Ashwini Chaudhary
2
@ AshwiniChaudhary Ich denke, er fragt im Wesentlichen, wie man die 0x
Mine

Antworten:

175
>>> format(3735928559, 'x')
'deadbeef'
Jamylak
quelle
34
Ich muss das alte deadbeefBeispiel lieben . Und format()ist der beste Weg, dies zu tun.
Martijn Pieters
56

Verwenden Sie diesen Code:

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

Hier können Sie auch eine Reihe von Ziffern angeben:

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

Für Python 2.6 verwenden

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

oder

'{0:06x}'.format(int(line))
Eumiro
quelle
8
Die Verwendung der format()Funktion ist einfacher, Sie verwenden keine Vorlagenfunktion, sondern nur die Formatierung. Wenn alle Ihre Vorlage enthält , ist {:..}für einen Wert bewegen , format(value, '..')statt.
Martijn Pieters
Mit f.write('{:x}'.format(hex(int(line)))), heißt esValueError: zero length field name in format
Mahmood
formatbraucht ein int, kein string:f.write('{:x}'.format(int(line)))
eumiro
17

Sie können einfach schreiben

hex(x)[2:]

um die ersten beiden Zeichen zu entfernen.

Guillaume Lemaître
quelle
2
Dies ist nicht sicher gegen zukünftige Änderungen der Ausgabe.
Stefano Sanfilippo
1
Auch in Python 2 mit langen Zahlen erzeugt es seltsame Ausgabe:>>> hex(3735928559)[2:] 'deadbeefL'
Jamylak
@esseks: Ich bezweifle, dass sie das Ausgabeformat vor der nächsten Hauptversion ändern werden. Sie werden sowieso andere Inkompatibilitäten haben.
Janus Troelsen
8
Dies wird unterbrochen, wenn xes negativ ist.
DSM
13

Python 3.6+:

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

Formatierung von Zeichenfolgen im alten Stil:

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

Neuer Stil

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

Die Verwendung von Großbuchstaben als Formatzeichen ergibt hexadezimale Großbuchstaben

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

Docs sind hier.

msvalkon
quelle