Conversia numerelor binare, octale și hexazecimale și a șirurilor de caractere între ele în Python

Afaceri

Python poate gestiona numere și șiruri de caractere ca numere binare, octale și hexazecimale, precum și numerele zecimale obișnuite. De asemenea, este ușor de convertit între ele.

În această secțiune vor fi explicate următoarele conținuturi, împreună cu exemple de cod.

  • Scrieți numere întregi în binar, octal și hexazecimal.
  • Conversia numerelor în șiruri de caractere în notație binară, octală și hexazecimală.
    • funcție încorporată (de exemplu, în limbajul de programare)bin(),oct(),hex()
    • metoda șirului de caracterestr.format(), Funcții încorporateformat(), f string
    • Convertește un număr întreg negativ într-un șir de caractere în format complement la doi.
  • Conversia șirurilor de caractere în notație binară, octală și hexazecimală în numere.
    • funcție încorporată (de exemplu, în limbajul de programare)int()
  • Exemple de aplicații
    • Aritmetica șirurilor binare
    • Conversia între numere binare, octale și hexazecimale

Scrieți numere întregi în binar, octal și hexazecimal.

Prin adăugarea următoarelor prefixe, numerele întregi int pot fi scrise în binar, octal și, respectiv, hexazecimal.
De asemenea, puteți folosi majuscule.

  • Număr binar:0bsau0B
  • Octal:0osau0O
  • Număr hexazecimal:0xsau0X

Rezultatul din print() va fi în notație zecimală.

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

Chiar și cu prefixul, tipul este un întreg 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'>

Deoarece este un tip de număr întreg, poate fi utilizat pentru operații aritmetice obișnuite.

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

Începând cu Python 3.6, este posibil să se insereze caracterele de subliniere _ în numere. Repetarea unui semn de subliniere _ va avea ca rezultat o eroare, dar puteți insera câte doriți, atâta timp cât nu îl repetați.

Sublinierea _ nu afectează numărul, astfel încât poate fi utilizată ca separator atunci când există mai multe cifre. De exemplu, inserarea unui semn de subliniere _ la fiecare patru cifre este ușor de citit.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Conversia numerelor în șiruri de caractere în notație binară, octală și hexazecimală.

Pentru a converti un număr într-un șir de caractere în notație binară, octală sau hexazecimală, utilizați următoarele funcții încorporate.

  • funcție încorporată (de exemplu, în limbajul de programare)bin(),oct(),hex()
  • metoda șirului de caracterestr.format(), Funcții încorporateformat(), f string

Această secțiune explică, de asemenea, cum se obține un șir de caractere exprimat în format complement la doi pentru valori negative.

Funcții încorporate bin(), oct(), hex()

Următoarele funcții încorporate pot converti numere în șiruri binare, octale și hexazecimale.

  • Număr binar:bin()
  • Octal:oct()
  • Număr hexazecimal:hex()

Fiecare returnează un șir de caractere cu următoarele prefixe

  • Număr binar:0b
  • Octal:0o
  • Număr hexazecimal: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'>

Dacă nu aveți nevoie de prefix, utilizați slice[2:] pentru a extrage șirul din spatele acestuia sau utilizați format(), după cum se explică în continuare.

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

Dacă doriți să îl convertiți într-un șir de caractere zecimale, puteți utiliza str().

print(str(i))
# 255

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

Funcția încorporată format(), șir de caractere metoda str.format(), f string

Funcția încorporată format() și metodele string str.format() și f-string pot, de asemenea, converti numere în șiruri binare, octale și hexazecimale.

Prin specificarea celui de-al doilea argument al format() după cum urmează, acesta poate fi convertit în șiruri binare, octale și, respectiv, hexazecimale.

  • Număr binar:b
  • Octal:o
  • Număr hexazecimal: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'>

Dacă doriți să obțineți un șir de caractere cu prefixul 0b,0o,0x, adăugați # la șirul de specificații de formatare.

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

De asemenea, este posibil să se completeze 0 cu orice număr de cifre. Rețineți că numărul de caractere pentru prefix (două caractere) trebuie, de asemenea, să fie luat în considerare atunci când se completează zero cu un prefix.

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

Metoda string str.format() poate fi utilizată, de asemenea, pentru conversie.

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

Începând cu Python 3.6, puteți utiliza, de asemenea, șirul f.f'xxx'

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

Convertește un număr întreg negativ într-un șir de caractere în format complement la doi.

Atunci când un număr întreg negativ este convertit într-un șir binar sau hexazecimal folosind bin() sau format(), valoarea absolută va avea un semn minus.

x = -9

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

În Python, operațiile de tip bitwise asupra numerelor întregi negative sunt, de asemenea, efectuate în reprezentarea complementului la doi. Prin urmare, dacă doriți să obțineți un șir de caractere exprimat în forma complementului la doi, puteți efectua un OR& logic bitwise cu numărul maxim de cifre de biți necesar, după cum urmează.

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

Conversia șirurilor de caractere în notație binară, octală și hexazecimală în numere.

Funcția încorporată int()

Pentru a converti un șir de caractere în notație binară, octală sau hexazecimală într-un număr, utilizați funcția încorporată int().

Cu int(string, radix), un șir de caractere str în notație binară, octală, hexazecimal etc. poate fi convertit într-un int numeric pe baza radixului. În cazul în care radixul este omis, numărul este considerat a fi zecimal.

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

În cazul în care radixul este setat la 0, conversia se face pe baza următorului prefix de șir.

  • Prefix binar:0bsau0B
  • Prefix octal:0osau0O
  • Prefix hexazecimal:0xsau0X
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

Dacă numărul de bază este 0 și nu există un prefix, acesta va fi convertit ca număr zecimal, dar rețineți că, dacă începutul (partea stângă) este completat cu 0, se va produce o eroare.

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

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

În alte cazuri, șirurile umplute cu zero pot fi convertite ca atare.

print(int('010'))
# 10

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

În cazul în care șirul nu poate fi convertit cu radixul sau prefixul specificat, apare o eroare.

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

Exemple de aplicații

Aritmetica șirurilor binare

De exemplu, pentru a efectua o operație asupra unui șir de caractere în notație binară cu prefixul 0b.

Puteți să o convertiți cu ușurință într-o valoare numerică (tip întreg int), să efectuați operații asupra ei și apoi să o convertiți din nou într-un șir de caractere str.

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

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

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

Conversia între numere binare, octale și hexazecimale

De asemenea, este ușor de convertit șirurile binare, octale și hexazecimale între ele. Odată convertit într-un int numeric, acesta poate fi convertit într-un șir de caractere de orice format.

Umplerea cu zero, prefixarea etc. poate fi controlată prin șirul de specificații de formatare.

a_0b = '0b1110001010011'

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

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