> **Источник:** https://python-all.ru/2.6/c-api/objbuffer.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Старый буферный протокол

В этом разделе описывается устаревший буферный протокол, который был введён в Python 1.6. Он всё ещё поддерживается, но считается устаревшим в серии Python 2.x. В Python 3.0 введён новый буферный протокол, устраняющий недостатки и слабые места старого протокола; этот новый протокол был портирован обратно в Python 2.6. См. [*Буферные объекты*](https://python-all.ru/2.6/c-api/buffer.html#bufferobjects) для получения дополнительной информации.

**int `PyObject_AsCharBuffer`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*obj*, const char *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**

Возвращает указатель на область памяти, доступную только для чтения, пригодную для ввода на основе символов. Аргумент *obj* должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает `0`, устанавливает *buffer* на область памяти и *buffer\_len* – длину буфера. При ошибке возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.

**int `PyObject_AsReadBuffer`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*obj*, const void *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**

Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент *obj* должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает `0`, устанавливает *buffer* на область памяти и *buffer\_len* – длину буфера. При ошибке возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.

**int `PyObject_CheckReadBuffer`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает `1`, если *o* поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращает `0`.

Новое в версии 2.2.

**int `PyObject_AsWriteBuffer`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*obj*, void *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**

Возвращает указатель на область памяти, доступную для записи. Аргумент *obj* должен поддерживать интерфейс односегментного символьного буфера. В случае успеха возвращает `0`, устанавливает *buffer* на адрес памяти, а *buffer\_len* – на длину буфера. При ошибке возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.
