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.