Во-первых, синтаксис байтовых литералов во многом такой же, как и для строковых литералов, за исключением bдобавления префикса:

  • Одинарные кавычки:b'still allows embedded "double" quotes'
  • Двойные кавычки:b"still allows embedded 'single' quotes"
  • Тройные кавычки: b'''3 single quotes''',b"""3 double quotes"""

В байтовых литералах допускаются только символы ASCII (независимо от заявленной кодировки исходного кода). Любые двоичные значения свыше 127 должны быть введены в байтовые литералы с использованием соответствующей экранированной последовательности.

Как и строковые литералы, байтовые литералы могут использовать rпрефикс для отключения обработки экранированных последовательностей. Подробнее о различных формах байтовых литералов, включая поддерживаемые экранированные последовательности, см. в разделе «Строковые и байтовые литералы» .

В то время как литералы и представления байтов основаны на тексте ASCII, объекты байтов фактически ведут себя как неизменяемые последовательности целых чисел, каждое значение в которых ограничено следующим образом 0 <= x < 256(попытки нарушить это ограничение приведут к срабатыванию ValueError). Это сделано намеренно, чтобы подчеркнуть, что, хотя многие двоичные форматы включают элементы на основе ASCII и могут эффективно обрабатываться некоторыми текстоориентированными алгоритмами, для произвольных двоичных данных это, как правило, не так (слепое применение алгоритмов обработки текста к двоичным форматам данных, несовместимым с ASCII, обычно приводит к повреждению данных).

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

  • Объект байтов, заполненный нулями, указанной длины:bytes(10)
  • Из итерируемого ряда целых чисел:bytes(range(20))
  • Копирование существующих двоичных данных через буферный протокол:bytes(obj)

См. также встроенные байты .

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

classmethod fromhex(string, /)

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

>> >  байты . fromhex ( '2Ef0 F1f2 ' ) 
b'.\xf0\xf1\xf2'

Изменено в версии 3.7:bytes.fromhex()теперь пропускает все пробелы ASCII в строке, а не только пробелы.

Изменено в версии 3.14:bytes.fromhex()теперь принимает в качестве входных данных объекты в формате ASCII bytes и байты .

Существует функция обратного преобразования для преобразования объекта байтов в его шестнадцатеричное представление.

hex(*, bytes_per_sep=1)
hex sep , bytes_per_sep 1 )

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

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

Чтобы сделать шестнадцатеричную строку более удобной для чтения, можно указать параметр sep в качестве разделителя для включения в вывод. По умолчанию этот разделитель будет добавлен между каждым байтом. Второй необязательный параметр bytes_per_sep управляет интервалом. Положительные значения определяют положение разделителя справа, отрицательные — слева.

>> > значение =  b'\xf0\xf1\xf2' 
>> > значение . hex ( '-' ) 
'f0-f1-f2' 
>> > значение . hex ( '_' ,  2 ) 
'f0_f1f2' 
>> >  b'UUDDLRLRAB' . hex ( ' ' ,  - 4 ) 
'55554444 4c524c52 4142'

Добавлено в версии 3.5.

Изменено в версии 3.8:bytes.hex() теперь поддерживает необязательные параметры sep и bytes_per_sep для вставки разделителей между байтами в шестнадцатеричном выводе.

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

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