Konvertieren von binären, oktalen und hexadezimalen Zahlen und Zeichenketten in Python ineinander und auseinander

Geschäft

Python kann mit Zahlen und Zeichenketten als Binär-, Oktal- und Hexadezimalzahlen sowie mit den üblichen Dezimalzahlen umgehen. Es ist auch einfach, zwischen ihnen zu konvertieren.

In diesem Abschnitt werden die folgenden Inhalte zusammen mit einem Beispielcode erläutert.

  • Schreiben Sie ganze Zahlen in binärer, oktaler und hexadezimaler Form.
  • Konvertieren von Zahlen in Zeichenfolgen in binärer, oktaler und hexadezimaler Notation.
    • eingebaute Funktion (z.B. in einer Programmiersprache)bin(),oct(),hex()
    • String-Methodestr.format(), Eingebaute Funktionenformat(), f Zeichenfolge
    • Konvertiert eine negative Ganzzahl in eine Zeichenkette im Zweierkomplementformat.
  • Konvertiert Zeichenketten in binärer, oktaler und hexadezimaler Notation in Zahlen.
    • eingebaute Funktion (z.B. in einer Programmiersprache)int()
  • Anwendungsbeispiele
    • Binäre String-Arithmetik
    • Konvertieren zwischen Binär-, Oktal- und Hexadezimalzahlen

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

Durch Hinzufügen der folgenden Präfixe können Ganzzahlen in binärer, oktaler bzw. hexadezimaler Form geschrieben werden.
Sie können auch Großbuchstaben verwenden.

  • Binäre Zahl:0boder0B
  • Oktal:0ooder0O
  • Hexadezimale Zahl:0xoder0X

Die Ausgabe von print() erfolgt in dezimaler Schreibweise.

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

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

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

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

Trotz des Präfixes ist der Typ eine Ganzzahl 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 es sich um einen Ganzzahlentyp handelt, kann er für reguläre arithmetische Operationen verwendet werden.

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

Ab Python 3.6 ist es möglich, Unterstriche _ in Zahlen einzufügen. Die Wiederholung eines Unterstrichs _ führt zu einem Fehler, aber Sie können so viele Unterstriche einfügen, wie Sie wollen, solange Sie sie nicht wiederholen.

Der Unterstrich _ hat keinen Einfluss auf die Zahl, so dass er bei vielen Ziffern als Trennzeichen verwendet werden kann. Wenn Sie zum Beispiel alle vier Ziffern einen Unterstrich _ einfügen, ist das leicht zu lesen.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Konvertieren von Zahlen in Zeichenfolgen in binärer, oktaler und hexadezimaler Notation.

Um eine Zahl in eine Zeichenkette in binärer, oktaler oder hexadezimaler Schreibweise umzuwandeln, verwenden Sie die folgenden eingebauten Funktionen.

  • eingebaute Funktion (z.B. in einer Programmiersprache)bin(),oct(),hex()
  • String-Methodestr.format(), Eingebaute Funktionenformat(), f Zeichenfolge

In diesem Abschnitt wird auch erklärt, wie man eine Zeichenkette im Zweierkomplementformat für negative Werte erhält.

Eingebaute Funktionen bin(), oct(), hex()

Die folgenden eingebauten Funktionen können Zahlen in binäre, oktale und hexadezimale Zeichenfolgen umwandeln.

  • Binäre Zahl:bin()
  • Oktal:oct()
  • Hexadezimale Zahl:hex()

Jeder gibt eine Zeichenkette mit den folgenden Präfixen zurück

  • Binäre Zahl:0b
  • Oktal:0o
  • Hexadezimale Zahl:0x
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 Zeichenkette dahinter zu extrahieren, oder verwenden Sie format(), wie im Folgenden erläutert.

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

Wenn Sie sie in eine dezimale Zeichenkette umwandeln wollen, können Sie str() verwenden.

print(str(i))
# 255

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

Eingebaute Funktion format(), string Methode str.format(), f string

Die eingebaute Funktion format() und die String-Methoden str.format() und f-string können auch Zahlen in binäre, oktale und hexadezimale Strings umwandeln.

Durch Angabe des zweiten Arguments von format() wie folgt kann es in binäre, oktale bzw. hexadezimale Zeichenfolgen umgewandelt werden.

  • Binäre Zahl:b
  • Oktal:o
  • Hexadezimale Zahl:x
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 eine Zeichenkette mit dem Präfix 0b,0o,0x erhalten möchten, fügen Sie # an die Formatierungsangabe an.

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

Es ist auch möglich, die 0 mit einer beliebigen Anzahl von Ziffern auszufüllen. Beachten Sie, dass die Anzahl der Zeichen für das Präfix (zwei Zeichen) ebenfalls berücksichtigt werden muss, wenn die Null mit einem Präfix aufgefüllt wird.

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 ebenfalls zur Konvertierung verwendet werden.

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

Ab Python 3.6 können Sie auch die Zeichenkette f verwenden.f'xxx'

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

Konvertiert eine negative Ganzzahl in eine Zeichenkette im Zweierkomplementformat.

Wenn eine negative Ganzzahl mit bin() oder format() in eine binäre oder hexadezimale Zeichenkette umgewandelt wird, erhält der Absolutwert ein Minuszeichen.

x = -9

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

In Python werden bitweise Operationen mit negativen ganzen Zahlen auch in Zweierkomplement-Darstellung ausgeführt. Wenn Sie also eine Zeichenkette in Zweierkomplement-Darstellung erhalten möchten, können Sie ein bitweises logisches ODER& mit der maximal erforderlichen Anzahl von Bitziffern durchführen, wie folgt.

  • 4bit:0b1111(=0xf)
  • 8bit:0xff
  • 16bit:0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

Konvertiert Zeichenketten in binärer, oktaler und hexadezimaler Notation in Zahlen.

Eingebaute Funktion int()

Um eine Zeichenkette in binärer, oktaler oder hexadezimaler Schreibweise in eine Zahl zu konvertieren, verwenden Sie die eingebaute Funktion int().

Mit int(string, radix) kann eine Zeichenkette str in binärer, oktaler, hexadezimaler Notation usw. in eine numerische int-Zahl auf der Grundlage des Radix konvertiert werden. Wird das Radix weggelassen, wird die Zahl als dezimal betrachtet.

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 das Radix auf 0 gesetzt ist, erfolgt die Konvertierung auf der Grundlage des folgenden String-Präfixes.

  • Binäres Präfix:0boder0B
  • Oktalpräfix:0ooder0O
  • Hexadezimales Präfix:0xoder0X
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 Basiszahl 0 ist und kein Präfix vorhanden ist, wird sie in eine Dezimalzahl umgewandelt, aber beachten Sie, dass ein Fehler auftritt, wenn der Anfang (die linke Seite) mit 0 gefüllt ist.

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

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

In anderen Fällen können mit Nullen gefüllte Zeichenketten unverändert konvertiert werden.

print(int('010'))
# 10

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

Wenn die Zeichenkette nicht mit dem angegebenen Radix oder Präfix konvertiert werden kann, tritt ein Fehler auf.

# 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

Zum Beispiel, um eine Operation an einer Zeichenkette in binärer Notation mit dem Präfix 0b durchzuführen.

Sie können ihn leicht in einen numerischen Wert (Ganzzahl vom Typ int) umwandeln, Operationen damit durchführen und ihn dann wieder in eine Zeichenkette str zurückwandeln.

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

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

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

Konvertieren zwischen Binär-, Oktal- und Hexadezimalzahlen

Es ist auch einfach, binäre, oktale und hexadezimale Zeichenketten ineinander umzuwandeln. Nach der Umwandlung in einen numerischen Wert kann dieser in eine Zeichenkette beliebigen Formats umgewandelt werden.

Das Auffüllen mit Nullen, das Voranstellen von Zeichen usw. kann durch die Formatierungsangabe gesteuert werden.

a_0b = '0b1110001010011'

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

print(format(int(a, 0), '#010o'))
# 0o00000011
Copied title and URL