Cómo convertir Int a Bytes en Python 2 y Python 3
-
Método de conversión de
int
abytes
compatible con Python 2.7 y 3 -
Métodos de conversión de Python 3 sólo de
int
abytes
- Comparación de rendimiento
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'
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étodostruct.pack()
métodoint.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.
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