Como Converter Int em Bytes em Python 2 e Python 3

Jinku Hu 30 janeiro 2023
  1. Python 2.7 e 3 Compatível int para bytes Método de Conversão
  2. Python 3 Apenas int a bytes Métodos de Conversão
  3. Comparação de Desempenho
Como Converter Int em Bytes em Python 2 e Python 3

A conversão de int para bytes é a operação inversa de conversão de bytes para int que é introduzida no último tutorial de HowTo. A maioria dos métodos int-to-bytes introduzidos neste artigo são os métodos invertidos dos métodos bytes-to-int.

Python 2.7 e 3 Compatível int para bytes Método de Conversão

Você poderia utilizar a função pack no Python módulo estrutural para converter o inteiro em bytes no formato específico.

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

O primeiro argumento na função struct.pack é a string de formato que especifica o formato de bytes como comprimento de bytes, sinal, ordem de bytes (pequeno ou grande endian), etc.

Python 3 Apenas int a bytes Métodos de Conversão

Utilize bytes para converter int para bytes

Como indicado no último artigo, bytes é um tipo de dado embutido do Python 3. Você poderia facilmente usar bytes para converter o inteiro 0~255 para o tipo de dados bytes.

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

O inteiro deve estar rodeado pelo parêntese, caso contrário, você receberá o objeto bytes object of size given by the parameter initialized with null bytes, mas não os bytes correspondentes.

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

Utilize int.to_bytes() Método para converter int para bytes

A partir de Python3.1, um novo método de classe inteira int.to_bytes() é introduzido. É o método de conversão reversa de int.from_bytes(), como discutido no último artigo.

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

O primeiro argumento é o comprimento de dados dos bytes convertidos, o segundo argumento byteorder define a ordem dos bytes para ser pequeno ou grande-endiano, e o argumento opcional signed determina se o complemento de dois é utilizado para representar o número inteiro.

Comparação de Desempenho

Em Python 3, você tem 3 maneiras de converter int para bytes,

  • bytes() método
  • struct.pack() método
  • int.to_bytes() método

Verificaremos o tempo de execução de cada método para comparar seu desempenho, e finalmente lhe daremos a recomendação se você quiser aumentar sua velocidade de execução do código.

>>> 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
Método de Conversão -Tempo de execução (1 milhão de vezes)
bytes() 0.31296982169325455 s
struct.pack() 0.2640925447800839 s
int.to_bytes() 0.5622947660224895 s

Portanto, utilize a função struct.pack() para realizar a conversão de int-to-bytes para obter a melhor performance de execução, embora ela já tenha sido introduzida no ramo Python 2.

Autor: 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

Artigo relacionado - Python Bytes