Skip to content

Konvertieren von binär, oktal, dezimal und hexadezimal in Python

Python

In Python können Sie Zahlen und Strings sowohl binär (bin), oktal (oct) und hexadezimal (hex) als auch dezimal verarbeiten. Sie können auch ineinander umgerechnet werden.

Dieser Artikel hat folgenden Inhalt.

  • Schreiben Sie ganze Zahlen in binärer, oktaler und hexadezimaler Schreibweise
  • Konvertieren Sie eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge
    • bin(), okt(), hex()
    • format(), str.format(), f-Strings
    • Wandeln Sie eine negative Ganzzahl in eine Zeichenfolge in Zweierkomplementdarstellung um
  • Konvertieren Sie eine binäre, oktale und hexadezimale Zeichenfolge in einer Zahl
  • Anwendungsbeispiele
    • Binäre String-Arithmetik
    • Konvertieren Sie zwischen Binär-, Oktal- und Hexadezimalzahlen

Im following Artikel FINDEN SIE sterben Grundlagen der Konvertierung zwischen dem String (str) und der Zahl (int, float).

Schreiben Sie ganze Zahlen in binärer, oktaler und hexadezimaler Schreibweise

Durch Hinzufügen der Präfixe 0b, 0o und 0x can int-Zahlen vom Typ Integer binär, oktal bzw. hexadezimal geschrieben werden. Die Ausgabe von print() erfolgt in Dezimalschreibweise.

bin_num = 0b10
oct_num = 0o10
hex_num = 0x10

print(bin_num)
print(oct_num)
print(hex_num)
# 2
# 8
# 16

Sie können auch die Großbuchstaben 0B, 0O und 0X verwenden.

Bin_num = 0B10
Oct_num = 0O10
Hex_num = 0X10

print(Bin_num)
print(Oct_num)
print(Hex_num)
# 2
# 8
# 16

Auch mit einem Präfix ist der Typ eine ganze Zahl int.

print(type(bin_num))
print(type(oct_num))
print(type(hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

print(type(Bin_num))
print(type(Oct_num))
print(type(Hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

Da sie int sind, können sie wie gewohnt bedient werden.

result = 0b10 * 0o10 + 0x10
print(result)
# 32

In Python 3.6 und höher können Sie Unterstriche _ in Zahlen einfügen. Das Wiederholen des Unterstrichs _ löst einen Fehler aus, aber SIE können beliebig viele einfügen, wenn er nicht wiederholt wird.

Bei vielen kann der Unterstrich _ als Trennzeichen verwendet werden. Zum Beispiel ist es einfacher zu lesen, wenn Sie alle vier Ziffern _ eingeben.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Wandeln Sie eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge um

SIE can sterben following Funktionen verwenden, um eine Zahl in eine binäre, oktale oder hexadezimale Zeichenfolge umzuwandeln.

  • Eingebaute Funktionen bin(), oct(), hex()
  • Eingebaute Funktion format(), String-Methode str.format(), f-strings

Außerdem WIRD beschrieben, wie man einen String in Zweierkomplementdarstellung für einen negativen Wert erhält.

bin(), okt(), hex()

Die integrierten Funktionen bin(), oct() und hex() können verwendet werden, um eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge umzuwandeln. Diese Funktionen geben eine Zeichenfolge mit den Präfixen 0b, 0o bzw. 0x zurück.

i = 255

print(bin(i))
print(oct(i))
print(hex(i))
# 0b11111111
# 0o377
# 0xff

print(type(bin(i)))
print(type(oct(i)))
print(type(hex(i)))
# <class 'str'>
# <class 'str'>
# <class 'str'>

Wenn SIE das Präfix nicht benötigen, verwenden SIE Slice [2:], um die einzelnen Zeichenfolgen zu extrahieren, oder verwenden SIE format() wie im Folgenden beschrieben.

print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff

Wenn Sie in eine Dezimalzeichenfolge konvertieren möchten, verwenden Sie str().

print(str(i))
# 255

print(type(str(i)))
# <class 'str'>

format(), str.format(), f-Strings

Die eingebaute Funktion format(), die String-Methode str.format() und f-strings können auch used Werden, um Eine Zahl in einen binären, oktalen oder hexadezimalen String umzuwandeln.

Durch die Angabe von b, o und x im Formatspezifikations-String des zweiten Arguments von format() kann eine Zahl in einem binären, oktalen bzw. hexadezimalen String konvertiert werden.

print(format(i, 'b'))
print(format(i, 'o'))
print(format(i, 'x'))
# 11111111
# 377
# ff

print(type(format(i, 'b')))
print(type(format(i, 'o')))
print(type(format(i, 'x')))
# <class 'str'>
# <class 'str'>
# <class 'str'>

Wenn SIE die Zeichenfolge mit dem Präfix 0b, 0o, 0x erhalten möchten, fügen Sie # zur Formatspezifikationszeichenfolge hinzu.

print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff

Es ist auch möglich, Null (0) mit beliebig vielen Ziffern einzugeben. Beachten Sie, dass beim Auffüllen von Null mit Einem Präfix auch die Anzahl der Zeichen für das Präfix (zwei Zeichen) berücksichtigt werden müssen.

print(format(i, '08b'))
print(format(i, '08o'))
print(format(i, '08x'))
# 11111111
# 00000377
# 000000ff

print(format(i, '#010b'))
print(format(i, '#010o'))
print(format(i, '#010x'))
# 0b11111111
# 0o00000377
# 0x000000ff

Die String-Methode str.format() kann für dieselbe Konvertierung verwendet werden.

print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff

In Python 3.6 oder höher können Sie auch die F-Strings (f’xxx‘) verwenden.

print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff

Wandeln Sie eine negative Ganzzahl in eine Zeichenfolge in Zweierkomplementdarstellung um

Bei Verwendung von bin() oder format() werden negative Ganzzahlen in absolute Werte mit Minuszeichen umgewandelt.

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

In Python werden bitweise Operationen mit negativen Ganzzahlen in der Zweierkomplementdarstellung durchgeführt. If you also eine Zeichenfolge erhalten möchten, die in der Zweierkomplementdarstellung hören WIRD, nehmen SIE das bitweise Und & der maximal erforderliche Anzahl von Ziffern, zum Beispiel 0b1111 (= 0xf ) für 4 Bit, 0xff für 8 Bit und 0xffff für 16 Bit.

print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

Konvertieren Sie eine binäre, oktale und hexadezimale Zeichenfolge in einer Zahl

int()

Verwenden Sie die integrierte Funktion int(), um eine binäre, oktale und hexadezimale Zeichenfolge in eine Zahl umzuwandeln.

Sie können einen binären, oktalen und hexadezimalen String basierend auf dem Radix mit int(string, radix) in einen Integer umwandeln. If radix weggelassen WIRD, WIRD davon ausgegangen, dass es sich um eine Dezimalzahl handelt.

print(int('10'))
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
# 10
# 2
# 8
# 16

print(type(int('10')))
print(type(int('10', 2)))
print(type(int('10', 8)))
print(type(int('10', 16)))
# <class 'int'>
# <class 'int'>
# <class 'int'>
# <class 'int'>

Wenn Sie Radix auf 0 setzen, wird es entsprechend dem Präfix konvertiert (0b, 0o, 0x oder 0B, 0O, 0X).

print(int('0b10', 0))
print(int('0o10', 0))
print(int('0x10', 0))
# 2
# 8
# 16

print(int('0B10', 0))
print(int('0O10', 0))
print(int('0X10', 0))
# 2
# 8
# 16

Wenn die Basis 0 ist, wird eine Zeichenfolge ohne Präfix in eine Dezimalzahl umgewandelt. Beachten Sie in diesem Fall, dass ein Fehlerauftritt, wenn der Anfang (linke Seite) mit 0 aufgefüllt WIRD.

print(int('10', 0))
# 10

# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'

In anderen Fällen kann der mit 0 aufgefüllte String konvertiert werden.

print(int('010'))
# 10

print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255

Ein Fehler WIRD ausgelöst, WENN sterben Schriftzeichen nicht basierend auf dem angegebenen Radix oder Präfix konvertiert werden können.

# print(int('ff', 2))
# ValueError: invalid literal for int() with base 2: 'ff'

# print(int('0a10', 0))
# ValueError: invalid literal for int() with base 0: '0a10'

# print(int('0bff', 0))
# ValueError: invalid literal for int() with base 0: '0bff'

Anwendungsbeispiele

Binäre String-Arithmetik

Wenn Sie beispielsweise einen binären String mit dem Präfix 0b operieren möchten, können Sie ihn einfach in eine Ganzzahl int konvertieren, etwas operieren und ihn dann wieder in den String strkonvertieren.

a = '0b1001'
b = '0b0011'

c = int(a, 0) + int(b, 0)

print(c)
print(bin(c))
# 12
# 0b1100

Konvertieren Sie zwischen Binär-, Oktal- und Hexadezimalzahlen

Es ist auch einfach, binäre, oktale und hexadezimale Zeichenfolgen ineinander umzuwandeln. Einmal in eine Zahl int konvertiert, kann sie in einen String beliebiger Formate konvertiert werden.

Nullauffüllung und Präfixe können durch sterben Formatierungsspezifikationszeichenfolge gesteuert Werden.

a_0b = '0b1110001010011'

print(format(int(a, 0), '#010x'))
# 0x00000009

print(format(int(a, 0), '#010o'))
# 0o00000011