-
Во-первых, синтаксис байтовых литералов во многом такой же, как и для строковых литералов, за исключением
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()теперь принимает в качестве входных данных объекты в формате ASCIIbytesи байты .
Существует функция обратного преобразования для преобразования объекта байтов в его шестнадцатеричное представление.
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).