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.



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

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'

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'

-8

Eine andere Lösung ist:

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

Wahrscheinlich eine archaische Antwort, aber funktional.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.