Байты Объекты

Эти функции поднимают TypeError, когда ожидают байтовый параметр и вызываются с небайтовым параметром.

type PyBytesObject

Этот подтип PyObject представляет объект байтов Python.

PyTypeObject PyBytes_Type
Part of the Stable ABI.

Этот экземпляр PyTypeObject представляет тип байтов Python; это такой же объект, как bytes в слое Python.

int PyBytes_Check(PyObject *o)

Возвращает true, если объект o является объектом типа bytes или экземпляром подтипа типа bytes. Эта функция всегда успешна.

int PyBytes_CheckExact(PyObject *o)

Возвращает true, если объект o является объектом типа bytes, но не является экземпляром подтипа типа bytes. Эта функция всегда успешна.

PyObject *PyBytes_FromString(const char *v)
Return value: New reference. Part of the Stable ABI.

Возвращает новый объект bytes с копией строки v в качестве значения в случае успеха и NULL в случае неудачи. Параметр v не должен быть NULL; он не будет проверяться.

PyObject *PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)
Return value: New reference. Part of the Stable ABI.

Возвращает новый объект bytes с копией строки v в качестве значения и длиной len в случае успеха, и NULL в случае неудачи. Если v равно NULL, содержимое объекта bytes неинициализируется.

PyObject *PyBytes_FromFormat(const char *format, ...)
Return value: New reference. Part of the Stable ABI.

Принимает строку формат в стиле C printf()- и переменное количество аргументов, вычисляет размер результирующего байтового объекта Python и возвращает байтовый объект с форматированными в него значениями. Переменные аргументы должны быть типа C и точно соответствовать символам формата в строке format. Допустимы следующие символы формата:

Символы формата

Тип

Комментарий

%%

n/a

Буквальный символ %.

%c

int

Один байт, представленный в формате C int.

%d

int

Эквивалентно printf("%d"). 1

%u

unsigned int

Эквивалентно printf("%u"). 1

%ld

длинный

Эквивалентно printf("%ld"). 1

%lu

беззнаковая длина

Эквивалентно printf("%lu"). 1

%zd

Py_ssize_t

Эквивалентно printf("%zd"). 1

%zu

размер_t

Эквивалентно printf("%zu"). 1

%i

int

Эквивалентно printf("%i"). 1

%x

int

Эквивалентно printf("%x"). 1

%s

const char*

Нуль-терминированный символьный массив C.

%p

const void*

Шестнадцатеричное представление указателя в языке C. В основном эквивалентен printf("%p") за исключением того, что гарантированно начинается с литерала 0x независимо от того, что дает платформа printf.

Нераспознанный символ формата приводит к тому, что вся остальная часть строки формата копируется в объект результата как есть, а все дополнительные аргументы отбрасываются.

1(1,2,3,4,5,6,7,8)

Для целочисленных спецификаторов (d, u, ld, lu, zd, zu, i, x): флаг 0-преобразования действует, даже если задана точность.

PyObject *PyBytes_FromFormatV(const char *format, va_list vargs)
Return value: New reference. Part of the Stable ABI.

Идентичен PyBytes_FromFormat() за исключением того, что принимает ровно два аргумента.

PyObject *PyBytes_FromObject(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Возвращает байтовое представление объекта o, реализующего буферный протокол.

Py_ssize_t PyBytes_Size(PyObject *o)
Part of the Stable ABI.

Возвращает длину байта в байтах объекта o.

Py_ssize_t PyBytes_GET_SIZE(PyObject *o)

Макроформа PyBytes_Size(), но без проверки ошибок.

char *PyBytes_AsString(PyObject *o)
Part of the Stable ABI.

Возвращает указатель на содержимое o. Указатель ссылается на внутренний буфер o, который состоит из len(o) + 1 байтов. Последний байт в буфере всегда нулевой, независимо от наличия других нулевых байтов. Данные не должны быть изменены каким-либо образом, если только объект не был только что создан с помощью PyBytes_FromStringAndSize(NULL, size). Он не должен быть деаллоцирован. Если o вообще не является объектом байтов, PyBytes_AsString() возвращает NULL и выдает TypeError.

char *PyBytes_AS_STRING(PyObject *string)

Макроформа PyBytes_AsString(), но без проверки ошибок.

int PyBytes_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)
Part of the Stable ABI.

Возвращает нуль-терминированное содержимое объекта obj через выходные переменные buffer и length.

Если length равно NULL, объект bytes не может содержать встроенных нулевых байтов; если это так, функция возвращает -1 и выдается предупреждение ValueError.

Буфер относится к внутреннему буферу obj, который включает дополнительный нулевой байт в конце (не учитывается в length). Данные не должны быть изменены каким-либо образом, если только объект не был только что создан с помощью PyBytes_FromStringAndSize(NULL, size). Он не должен быть деаллоцирован. Если obj вообще не является байтовым объектом, PyBytes_AsStringAndSize() возвращает -1 и выдает TypeError.

Изменено в версии 3.5: Ранее, когда в объекте bytes встречались встроенные нулевые байты, возникала ошибка TypeError.

void PyBytes_Concat(PyObject **bytes, PyObject *newpart)
Part of the Stable ABI.

Создать новый объект bytes в *bytes, содержащий содержимое newpart, добавленное к bytes; вызывающая сторона будет владеть новой ссылкой. Ссылка на старое значение bytes будет украдена. Если новый объект не может быть создан, старая ссылка на bytes все равно будет отброшена, а значение *bytes будет установлено в NULL; будет установлено соответствующее исключение.

void PyBytes_ConcatAndDel(PyObject **bytes, PyObject *newpart)
Part of the Stable ABI.

Создать новый объект bytes в *bytes, содержащий содержимое newpart, добавленное к bytes. Эта версия уменьшает количество ссылок на newpart.

int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)

Способ изменения размера объекта байтов, даже если он «неизменяем». Используйте эту функцию только для создания совершенно нового объекта байтов; не используйте ее, если байты могут быть уже известны в других частях кода. Ошибкой является вызов этой функции, если счетчик ссылок на входной объект bytes не равен единице. В качестве l-значения передается адрес существующего объекта bytes (он может быть записан в него) и желаемый новый размер. В случае успеха, *bytes содержит объект байтов измененного размера и возвращается 0; адрес в *bytes может отличаться от входного значения. Если перераспределение не удалось, исходный объект байтов в *bytes деаллоцируется, *bytes устанавливается в NULL, MemoryError устанавливается, и возвращается -1.

Вернуться на верх