Converteer binaire, octale en hexadecimale getallen en reeksen naar en van elkaar in Python

Bedrijf

Python kan getallen en tekenreeksen verwerken als binaire, octale en hexadecimale getallen, naast de gebruikelijke decimale getallen. Het is ook gemakkelijk om tussen deze getallen te converteren.

In deze sectie wordt de volgende inhoud uitgelegd, samen met voorbeeldcode.

  • Schrijf gehele getallen in binair, octaal en hexadecimaal.
  • Converteer getallen naar strings in binaire, octale en hexadecimale notatie.
    • ingebouwde functie (bv. in een programmeertaal)bin(),oct(),hex()
    • tekenreeksmethodestr.format(), Ingebouwde Functiesformat(), f string
    • Converteer een negatief geheel getal naar een string in two's complement formaat.
  • Converteer strings in binaire, octale en hexadecimale notatie naar getallen.
    • ingebouwde functie (bv. in een programmeertaal)int()
  • Toepassingsvoorbeelden
    • Binaire string rekenkunde
    • Omrekenen tussen binaire, octale en hexadecimale getallen

Schrijf gehele getallen in binair, octaal en hexadecimaal.

Door de volgende voorvoegsels toe te voegen, kunnen gehele getallen worden geschreven in respectievelijk binair, octaal en hexadecimaal.
U kunt ook hoofdletters gebruiken.

  • Binair nummer:0bof0B
  • Octal:0oof0O
  • Hexadecimaal getal:0xof0X

De uitvoer van print() zal in decimale notatie zijn.

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

Zelfs met het voorvoegsel, is het type een geheel getal 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'>

Aangezien het een integer type is, kan het worden gebruikt voor gewone rekenkundige bewerkingen.

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

Vanaf Python 3.6 is het mogelijk om underscores _ in te voegen in getallen. Het herhalen van een underscore _ zal resulteren in een fout, maar je kunt er zoveel invoegen als je wilt zolang je het maar niet herhaalt.

Het onderstrepingsteken _ heeft geen invloed op het getal, dus kan het als scheidingsteken worden gebruikt als er veel cijfers zijn. Bijvoorbeeld, het invoegen van een underscore _ om de vier cijfers is gemakkelijk te lezen.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Converteer getallen naar strings in binaire, octale en hexadecimale notatie.

Om een getal om te zetten in een tekenreeks in binaire, octale of hexadecimale notatie, kunt u de volgende ingebouwde functies gebruiken.

  • ingebouwde functie (bv. in een programmeertaal)bin(),oct(),hex()
  • tekenreeksmethodestr.format(), Ingebouwde Functiesformat(), f string

Dit gedeelte legt ook uit hoe je een string krijgt uitgedrukt in two's complement formaat voor negatieve waarden.

Ingebouwde functies bin(), oct(), hex()

De volgende ingebouwde functies kunnen getallen omzetten in binaire, octale en hexadecimale strings.

  • Binair nummer:bin()
  • Octal:oct()
  • Hexadecimaal getal:hex()

Elk geeft een string terug met de volgende voorvoegsels

  • Binair nummer:0b
  • Octal:0o
  • Hexadecimaal getal: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'>

Als je het voorvoegsel niet nodig hebt, gebruik dan slice[2:] om de string erachter te extraheren, of gebruik format() zoals hierna wordt uitgelegd.

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

Als je het wilt omzetten naar een decimale string, kun je str() gebruiken.

print(str(i))
# 255

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

Ingebouwde functie format(), string methode str.format(), f string

De ingebouwde functie format() en de string methodes str.format() en f-string kunnen ook getallen omzetten naar binaire, octale en hexadecimale strings.

Door het tweede argument van format() als volgt te specificeren, kan het worden geconverteerd naar binaire, octale en hexadecimale strings, respectievelijk.

  • Binair nummer:b
  • Octal:o
  • Hexadecimaal getal: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'>

Als je een string wilt krijgen met prefix 0b,0o,0x, voeg dan # toe aan de formatting specificatie string.

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

Het is ook mogelijk om 0 in te vullen met een willekeurig aantal cijfers. Merk op dat bij het invullen van een nul met een voorvoegsel ook rekening moet worden gehouden met het aantal tekens voor het voorvoegsel (twee tekens).

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

De string methode str.format() kan ook gebruikt worden voor conversie.

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

Vanaf Python 3.6 kunt u ook de string f gebruiken.f'xxx'

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

Converteer een negatief geheel getal naar een string in two's complement formaat.

Wanneer een negatief geheel getal geconverteerd wordt naar een binaire of hexadecimale string met bin() of format(), zal de absolute waarde een minteken hebben.

x = -9

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

In Python worden bitwise operaties op negatieve gehele getallen ook uitgevoerd in two's complement representatie. Als je dus een tekenreeks uitgedrukt in two's complement vorm wil bekomen, kan je een bitwise logische OR& nemen met het maximum aantal bitcijfers dat nodig is, als volgt.

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

Converteer strings in binaire, octale en hexadecimale notatie naar getallen.

Ingebouwde functie int()

Om een string in binaire, octale of hexadecimale notatie om te zetten in een getal, gebruik je de ingebouwde functie int().

Met int(string, radix) kan een string str in binaire, octale, hexadecimale notatie, enz. worden geconverteerd naar een numerieke int op basis van de radix. Indien de radix wordt weggelaten, wordt het getal als decimaal beschouwd.

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'>

Als de radix op 0 is ingesteld, vindt de conversie plaats op basis van het volgende string-voorvoegsel.

  • Binair voorvoegsel:0bof0B
  • Octaal voorvoegsel:0oof0O
  • Hexadecimaal voorvoegsel:0xof0X
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

Als het grondtal 0 is en er geen voorvoegsel is, zal het worden omgezet als een decimaal getal, maar merk op dat als het begin (linkerzijde) is gevuld met 0, er een fout zal optreden.

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

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

In andere gevallen kunnen met nullen gevulde strings worden geconverteerd zoals ze zijn.

print(int('010'))
# 10

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

Als de string niet kan worden geconverteerd met de opgegeven radix of prefix, treedt een fout op.

# 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'

Toepassingsvoorbeelden

Binaire string rekenkunde

Bijvoorbeeld, om een bewerking uit te voeren op een string in binaire notatie met het voorvoegsel 0b.

U kunt het gemakkelijk omzetten in een numerieke waarde (integer type int), er bewerkingen op uitvoeren, en het dan weer omzetten in een string str.

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

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

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

Omrekenen tussen binaire, octale en hexadecimale getallen

Het is ook gemakkelijk om binaire, octale en hexadecimale strings naar elkaar om te zetten. Eenmaal geconverteerd naar een numerieke int, kan deze worden geconverteerd naar een string van elk formaat.

Nulvulling, voorvoegsels, enz. kunnen worden geregeld door de opmaakspecificatiestring.

a_0b = '0b1110001010011'

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

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