Come convertire Int in Byte in Python 2 e Python 3

Jinku Hu 30 gennaio 2023
  1. Python 2.7 e 3 Metodo di conversione da int a bytes compatibile
  2. Python 3 Solo metodi di conversione da int a bytes
  3. Confronto delle prestazioni
Come convertire Int in Byte in Python 2 e Python 3

La conversione da int a bytes è la operazione inversa di conversione da bytes a int che è stata introdotta nell’ultimo tutorial HowTo. La maggior parte dei metodi int-to-bytes introdotti in questo articolo sono i metodi inversi dei metodi bytes-to-int.

Python 2.7 e 3 Metodo di conversione da int a bytes compatibile

Si può usare la funzione pack nel Python struct module per convertire l’intero in byte nel formato specifico.

>>> import struct
>>> struct.pack("B", 2)
'\x02'
>>> struct.pack(">H", 2)
'\x00\x02'
>>> struct.pack("<H", 2)
'\x02\x00'

Il primo argomento della funzione struct.pack è la stringa di formato che specifica il formato dei byte come la lunghezza dei byte, il segno, l’ordine dei byte (piccolo o grande endian), ecc.

Python 3 Solo metodi di conversione da int a bytes

Usa bytes per convertire int in bytes

Come indicato nel ultimo articolo, bytes è un tipo di dati integrato in Python 3. Si potrebbe facilmente usare bytes per convertire il tipo di dati interi 0~255 in byte.

>>> bytes([2])
b'\x02'
avviso

Il numero intero deve essere circondato dalla parentesi, altrimenti si otterrà l’oggetto bytes object of size given by the parameter initialized with null bytes ma non i byte corrispondenti.

>>> bytes(3)
b'\x00\x00\x00'

Usare int.to_bytes() Metodo per convertire int in bytes

Da Python3.1, viene introdotto un nuovo metodo di classe intera int.to_bytes(). È il metodo di conversione inversa di int.from_bytes() come discusso nell’ultimo articolo.

>>> (258).to_bytes(2, byteorder="little")
b'\x02\x01'
>>> (258).to_bytes(2, byteorder="big")
b'\x01\x02'
>>> (258).to_bytes(4, byteorder="little", signed=True)
b'\x02\x01\x00\x00'
>>> (-258).to_bytes(4, byteorder="little", signed=True)
b'\xfe\xfe\xff\xff'

Il primo argomento è la lunghezza dei dati convertiti in byte, il secondo argomento byteorder definisce l’ordine dei byte per essere piccolo o grande-endiano, e l’argomento opzionale signed determina se il complemento di due viene usato per rappresentare l’intero.

Confronto delle prestazioni

In Python 3, si hanno 3 modi per convertire int in bytes,

  • metodo bytes()
  • metodo struct.pack()
  • int.to_bytes() metodo

Verificheremo il tempo di esecuzione di ogni metodo per confrontare le loro prestazioni, e infine vi daremo la raccomandazione se volete aumentare la vostra velocità di esecuzione del codice.

>>> import timeint
>>> timeit.timeit('bytes([255])', number=1000000)
0.31296982169325455
>>> timeit.timeit('struct.pack("B", 255)', setup='import struct', number=1000000)
0.2640925447800839
>>> timeit.timeit('(255).to_bytes(1, byteorder="little")', number=1000000)
0.5622947660224895
Metodo di conversione -Tempo di esecuzione (1 milione di volte)
bytes() 0.31296982169325455 s
struct.pack() 0.2640925447800839 s
int.to_bytes() 0.5622947660224895 s

Pertanto, si prega di utilizzare la funzione struct.pack() per eseguire la conversione da int-to-byte per ottenere le migliori prestazioni di esecuzione, anche se è già introdotta nel ramo di Python 2.

Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Python Bytes