int.to_bytes() și int.from_bytes() în Python

Numere și matematică Python 3.2+ (valori implicite: 3.11+)

Transformă un număr întreg în octeți și octeții înapoi în număr.

Sintaxă
n.to_bytes(length=1, byteorder='big', *, signed=False)
int.from_bytes(octeti, byteorder='big', *, signed=False)

Ce face int.to_bytes() și int.from_bytes()

to_bytes() scrie un întreg pe un număr fix de octeți, iar int.from_bytes() citește un întreg din octeți. Sunt folosite în fișiere binare, protocoale de rețea și criptografie.

byteorder spune ordinea octeților: 'big' (cel mai semnificativ primul, ordinea „de rețea”) sau 'little' (cel mai puțin semnificativ primul, ca pe procesoarele x86 și ARM). Cu signed=True se pot reprezenta și numere negative. Din Python 3.11, length și byteorder au valori implicite.

Parametri

Parametru Descriere
length Numărul de octeți. Dacă numărul nu încape, apare OverflowError.
byteorder 'big' sau 'little'.
signed Dacă se folosește complementul față de doi pentru numere negative.

Ce returnează

to_bytes: bytes. from_bytes: int.

Exemple

Exemplul 1: Ordinea octeților

n = 1026
print(n.to_bytes(2, "big"), n.to_bytes(2, "little"))
print(n.to_bytes(4, "big").hex(" "))
print(int.from_bytes(b"\x04\x02", "big"), int.from_bytes(b"\x02\x04", "little"))

Rezultat

b'\x04\x02' b'\x02\x04'
00 00 04 02
1026 1026

Exemplul 2: Numere negative și depășire

print((-1).to_bytes(2, "big", signed=True))
print(int.from_bytes(b"\xff\xff", "big", signed=True), int.from_bytes(b"\xff\xff", "big"))
try:
    (300).to_bytes(1, "big")
except OverflowError as e:
    print("Eroare:", e)

Rezultat

b'\xff\xff'
-1 65535
Eroare: int too big to convert

Greșeli frecvente

  • Citești octeții cu altă ordine decât cea folosită la scriere și obții un număr complet diferit.

Comenzi înrudite

  • bytes() și bytearray(): Secvențe de octeți (valori 0-255) pentru date binare: fișiere, rețea, text codificat.
  • int(): Tipul numerelor întregi; int() transformă un text sau un număr zecimal în număr întreg.
  • int.bit_length() și int.bit_count(): Câți biți sunt necesari pentru a scrie un număr și câți dintre ei sunt 1.