Python Hexadezimal

76

Wie konvertiere ich Dezimalzahlen in Hex im folgenden Format (mindestens zwei Ziffern, mit Nullen aufgefüllt, ohne 0x-Präfix)?

Eingabe: 255 Ausgabe:ff

Eingabe: 2 Ausgabe:02

Ich habe es versucht, hex(int)[2:]aber es scheint, dass es das erste Beispiel zeigt, aber nicht das zweite.

VikkyB
quelle
1
Was hast du versucht? Warum ich diese Frage abgelehnt habe
Matt Ball
Ich habe hex (int) [2:] ausprobiert, aber es scheint, dass es das erste Beispiel zeigt, aber nicht das zweite.
VikkyB
Die Frage und die Antworten sind weniger nützlich, ohne explizit anzugeben, was konkret "das folgende Format" bedeutet. Wahrscheinlich "mindestens zwei Ziffern, nullgefüllt, ohne 0x-Präfix"?
LarsH
Mögliches Duplikat der Decorating Hex-Funktion zum
Auffüllen von

Antworten:

151

Verwenden Sie die format()Funktion mit einem '02x'Format.

>>> format(255, '02x')
'ff'
>>> format(2, '02x')
'02'

Der 02Teil weist format()an, mindestens zwei Ziffern zu verwenden und Nullen zu verwenden, um die Länge xaufzufüllen. Dies bedeutet hexadezimal in Kleinbuchstaben.

Die Mini-SpracheX für die Formatspezifikation bietet Ihnen auch die Möglichkeit, Hex in Großbuchstaben auszugeben, und Sie können der Feldbreite #ein 0xoder ein 0XPräfix voranstellen (je nachdem, ob Sie es verwendet haben xoder Xals Formatierer). Beachten Sie einfach, dass Sie die Feldbreite anpassen müssen, um diese zusätzlichen 2 Zeichen zu berücksichtigen:

>>> format(255, '02X')
'FF'
>>> format(255, '#04x')
'0xff'
>>> format(255, '#04X')
'0XFF'
Martijn Pieters
quelle
Ich habe ein Problem, bei dem das hexadezimale Präfix ein großes "X" hat, wenn das Format für die Verwendung der Hex-Ausgabe in Großbuchstaben festgelegt wird. Dies scheint in Ihrem Beispiel nicht der Fall zu sein. Ist dies nur ein Problem mit meiner lokalen Version von Python? Ich verwende Version 2.7.9.
JWP36
@ jwp36: nein, es war ein fehler in meiner antwort, jetzt korrigiert. Entschuldigen Sie.
Martijn Pieters
3
um das Format in der Ausgabezeichenfolge anzugeben'{:02x}'.format(255)
JuanPablo
1
@ JuanPablo: mach das nur in a größeren Zeichenfolge . Wenn Sie str.format()nur einen einzelnen Slot analysieren, erledigt Python zusätzliche Arbeit (da dies intern immer noch format(255, '02x')für diesen einen Slot verwendet wird).
Martijn Pieters
25

Ich denke, das ist was du willst:

>>> def twoDigitHex( number ):
...     return '%02x' % number
... 
>>> twoDigitHex( 2 )
'02'
>>> twoDigitHex( 255 )
'ff'
Yoav Kleinberger
quelle
-8

Eine andere Lösung ist:

>>> "".join(list(hex(255))[2:])
'ff'

Wahrscheinlich eine archaische Antwort, aber funktional.

TeNeX
quelle
2
In der gleichen Weise wie eine andere Antwort ist dies kein Null-Pad. Zum Beispiel "".join(list(hex(2))[2:])wertet '2'nicht aus '02'.
Therealrootuser
1
Dies ist gleichbedeutend mit hex(int)[2:]der Frage. Warum machst du eine Liste, um sie wieder aufzunehmen?
Wjandrea
Warum diese Antwort posten, wenn Sie bereits zustimmen, dass es eine bessere gibt?
Ryry1985