Как преобразовать Int в байты на Pythonх 2 и 3

  1. Python 2.7 и 3 Совместимый метод преобразования int в bytes
  2. Python 3 Только int к bytes Методы преобразования
  3. Сравнение производительности

Преобразование из int в bytes является обратной операцией преобразования из bytes в int, которая представлена в последнем учебнике HowTo. Большинство представленных в статье методов преобразования байт в байты - это обратные методы преобразования байт в распечатки.

Python 2.7 и 3 Совместимый метод преобразования int в bytes

Вы можете использовать функцию pack в Python struct module для преобразования целого в байты в определенном формате.

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

Первым аргументом в функции struct.pack является строка формата, которая задает формат байтов, такой как длина байта, знак, порядок следования байтов (малый или большой эндиан) и т.д.

Python 3 Только int к bytes Методы преобразования

Используйте bytes для преобразования int в `bytes”

Как было указано в прошлой статье, bytes - это встроенный тип данных с Python 3. Вы можете легко использовать bytes для приведения целого числа 0~255 к типу данных байт.

>>> bytes([2])
b'\x02`
предупреждение

Целое число должно быть окружено скобками, иначе получится объект размером байты, заданный параметром, инициализированным нулевым байтом, а не соответствующие ему байты.

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

Используйте метод int.to_bytes()Метод преобразования int в bytes

На Python3.1 введен новый метод целочисленных классов int.to_bytes(). Это метод обратного преобразования int.from_bytes(), о котором шла речь в предыдущей статье.

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

Первый аргумент - длина преобразованных байт данных, второй - порядок следования байт - маленький или большой, а опциональный аргумент signed определяет, используется ли дополнение двоих для представления целого числа.

Сравнение производительности

В Python 3 у вас есть 3 способа конвертировать int в bytes,

  • метод bytes()
  • метод struct.pack()
  • метод int.to_bytes()

Мы проверим время выполнения каждого метода, чтобы сравнить их производительность, и, наконец, дадим вам рекомендацию, если вы хотите увеличить скорость выполнения вашего кода.

>>> 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
Метод преобразования -Время исполнения (1 миллион раз)
bytes() 0.31296982169325455 s
struct.pack() 0.2640925447800839 s
int.to_bytes() 0.5622947660224895 s

Поэтому, пожалуйста, используйте функцию struct.pack() для выполнения преобразования в байты, чтобы получить наилучшую производительность исполнения, хотя она уже внедрена в ветку Python 2.

Сопутствующая статья - Python Bytes

  • Как конвертировать байты в интегралы на Python 2.7 и 3.x
  • Как преобразовать байты в строку на Pythonх 2 и 3
  • Как преобразовать строку в байты на Python
  • comments powered by Disqus