Сообщить об ошибке.

Изменяемый байтовый массив bytearray в Python

bytearray объекты являются изменяемым аналогом bytes объектов.

Выделенного литерального синтаксиса для объектов bytearray нет, они всегда создаются путем вызова конструктора встроенного класса bytearray():

  1. Создание пустого экземпляра: bytearray().
  2. Создание заполненного нулями экземпляра с заданной длиной: bytearray(10).
  3. Из итерируемых целых чисел: bytearray(range(20)).
  4. Копирование существующих двоичных данных через буферный протокол: bytearray(b'Hi!').

Поскольку объекты bytearray являются изменяемыми, они поддерживают:

Две шестнадцатеричные цифры точно соответствуют одному байту и по этому шестнадцатеричные числа являются широко используемым форматом для описания двоичных данных. Соответственно, тип bytearray имеет дополнительный метод класса для чтения данных в этом формате:


bytearray.fromhex(string):

Метод bytearray.fromhex() возвращает объект bytearray, декодируя данный строковый объект. Строка должна содержать две шестнадцатеричные цифры на байт, при этом пробелы ASCII игнорируются.

>>> bytearray.fromhex('2Ef0 F1f2  ')
# bytearray(b'.\xf0\xf1\xf2')

bytearray.hex():

Метод bytearray.hex() преобразовывает объект bytearray в его шестнадцатеричное представление. Возвращает строковый объект, содержащий две шестнадцатеричные цифры для каждого байта.

>>> bytearray(b'\xf0\xf1\xf2').hex()
# 'f0f1f2'

Важно: Так как объекты bytearray представляют собой последовательности целых чисел (похожие на список), для объекта bytearray с именем b выражение b[0] будет целым числом, а b[0:1] будет объектом bytearray длины 1. (Это контрастирует с текстовыми строками str, где и взятие по индексу, и операция среза дадут строку длины 1)

Представление объектов bytearray использует литеральный формат (bytearray(b'...')), так как это более полезно и наглядно, чем, например, bytearray([46, 46, 46]). Всегда можно преобразовать объект bytearray в список целых чисел с помощью list(b).

Примеры использования:

>>> b = bytearray([46, 46, 46])
>>> b
# bytearray(b'...')
>>> list(b)
# [46, 46, 46]
>>> b = bytearray(range(40,60,2))
>>> b
# bytearray(b'(*,.02468:')
>>> list(b)
[40, 42, 44, 46, 48, 50, 52, 54, 56, 58]