Cómo convertir Int a Bytes en Python 2 y Python 3

Jinku Hu 30 enero 2023
  1. Método de conversión de int a bytes compatible con Python 2.7 y 3
  2. Métodos de conversión de Python 3 sólo de int a bytes
  3. Comparación de rendimiento
Cómo convertir Int a Bytes en Python 2 y Python 3

La conversión de int a bytes es la operación inversa de conversión de bytes a int que se introduce en el último tutorial del HowTo. La mayoría de los métodos int-to-bytes introducidos en este artículo son los métodos inversos de los métodos bytes-to-int.

Método de conversión de int a bytes compatible con Python 2.7 y 3

Puedes usar la función pack en el módulo Python struct module para convertir el entero en bytes en el formato específico.

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

El primer argumento de la función struct.pack es la cadena de formato que especifica el formato de los bytes, como la longitud de los bytes, el signo, el orden de los bytes (endian pequeño o grande), etc.

Métodos de conversión de Python 3 sólo de int a bytes

Use bytes para convertir int en bytes

Como se indica en el último artículo, bytes es un tipo de datos incorporado de Python 3. Puede usar bytes para convertir el tipo de datos integer 0~255 a bytes.

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

El entero debe estar rodeado por el paréntesis, de lo contrario, obtendrá el bytes object of size given by the parameter initialized with null bytes pero no los bytes correspondientes.

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

Use el método int.to_bytes() para convertir int en bytes

A partir de Python3.1, se introduce un nuevo método de clase entera int.to_bytes(). Es el método de conversión inversa de int.from_bytes() como se discutió en el último artículo.

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

El primer argumento es la longitud de datos de los bytes convertidos, el segundo argumento byteorder define el orden de los bytes para que sean pequeños o grandes, y el argumento opcional signed determina si el complemento de dos se utiliza para representar el entero.

Comparación de rendimiento

En Python 3, tienes 3 formas de convertir int a bytes,

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

Comprobaremos el tiempo de ejecución de cada método para comparar su rendimiento, y finalmente le daremos la recomendación si desea aumentar la velocidad de ejecución de su 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 conversión -Tiempo de ejecución (1 millón de veces)
bytes() 0.31296982169325455 s
struct.pack() 0.2640925447800839 s
int.to_bytes() 0.5622947660224895 s

Por lo tanto, por favor utilice la función struct.pack() para realizar la conversión de int-to-bytes para obtener el mejor rendimiento de ejecución, aunque ya está introducida en la rama de 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

Artículo relacionado - Python Bytes