# Буфер

Здесь описаны операторы и функции для работы со двоичными данными в виде массива байт (тип **buf**).

* [bool( buf b ) bool](/stdlib/buffer.md#bool-buf-b-bool)
* [buf( str s ) buf](/stdlib/buffer.md#buf-str-s-buf)
* [str( buf b ) str](/stdlib/buffer.md#str-buf-b-str)
* [Base64( buf b ) str](/stdlib/buffer.md#base-64-buf-b-str)
* [DecodeInt( buf b, int offset ) int](/stdlib/buffer.md#decodeint-buf-b-int-offset-int)
* [Del( buf b, int off, int length ) buf](/stdlib/buffer.md#del-buf-b-int-off-int-length-buf)
* [EncodeInt( buf b, int i ) buf](/stdlib/buffer.md#encodeint-buf-b-int-i-buf)
* [Hex( buf b ) str](/stdlib/buffer.md#hex-buf-b-str)
* [Insert( buf b, int off, buf src) buf](/stdlib/buffer.md#insert-buf-b-int-off-buf-src-buf)
* [SetLen( buf b, int size ) buf](/stdlib/buffer.md#setlen-buf-b-int-size-buf)
* [Subbuf( buf b, int off, int length ) buf](/stdlib/buffer.md#subbuf-buf-b-int-off-int-length-buf)
* [UnBase64( str s ) buf](/stdlib/buffer.md#unbase-64-str-s-buf)
* [UnHex( str s ) buf](/stdlib/buffer.md#unhex-str-s-buf)
* [Write( buf b, int off, buf src ) buf](/stdlib/buffer.md#write-buf-b-int-off-buf-src-buf)

## Операторы

| Оператор             | Результат | Описание                                                                      |
| -------------------- | --------- | ----------------------------------------------------------------------------- |
| **\*** buf           | int       | Получить размер буфера в байтах.                                              |
| buf **?**            | bool      | Вызов *bool(buf)*.                                                            |
| buf **+** buf        | buf       | Объединить два буфера.                                                        |
| buf **=** buf        | buf       | Присваивание двоичных данных.                                                 |
| buf **&=** buf       | buf       | Создать клон буфера. Новая переменная будет работать с тем же набором данных. |
| buf **+=** buf       | buf       | Добавить один буфер к другому.                                                |
| buf **+=** int       | buf       | Добавить один байт к буферу. Число должно быть меньше 256.                    |
| buf **+=** str       | buf       | Добавить строку к буферу.                                                     |
| buf **+=** char      | buf       | Добавить символ к буферу.                                                     |
| buf **\[** int **]** | int       | Присвоить/получить байт по индексу.                                           |

## Функции

### bool(buf b) bool

Функция *bool* возвращает *false*, если буфер пустой. В противном случае, возвращается *true*.

### buf(str s) buf

Функция *buf* конвертирует строку в значение типа *buf* и возвращает его.

### str(buf b) str

Функция *str* конвертирует значение типа *buf* в строку и возвращает её.

### Base64(buf b) str

Функция *Base64* преобразует значение типа *buf* в строку в кодировке **base64** и возвращает её.

### DecodeInt(buf b, int offset) int

Функция *DecodeInt* получает целое число из параметра типа *buf*. *offset* - смещение в буфере, по которому необходимо прочитать число. Функция читает 8 байт и возвращает их как целое число.

### Del(buf b, int off, int length) buf

Функция *Del* удалять часть данных из массива байт. *off* - смещение удаляемых данных, *length* - количество удаляемых байт. Если *length* меньше нуля, то данные будут удаляться слева от указанного смещения. Функция возвращает переменную *b*, в которой произошло удаление.

### EncodeInt(buf b, int i) buf

Функция *EncodeInt* добавляет целое число к указанной переменной типа *buf*. Так как значение *int* занимает 8 байт, то к буферу добавляется 8 байт независимо от значения параметра *i*. Функция возвращает параметр *b*.

### Hex(buf b) str

Функция *Hex* преобразует значение типа *buf* в шестнадцатеричную строку и возвращает её.

### Insert(buf b, int off, buf src) buf

Функция *Insert* вставляет массив байт *src* в массив *b*. *off* - смещение, куда будет вставлен указанный массив байт. Функция возвращает переменную *b*.

### SetLen(buf b, int size) buf

Функция *SetLen* устанавливает размер буфера. Если *size* меньше размера буфера, то он будет обрезан. В противном случае, буфер будет дополнен нулями до указанного размера.

### Subbuf(buf b, int off, int length) buf

Функция *Subbuf* возвращает возвращает новый буфер, который содержит фрагмент буфера *b* с указанным смещением и длиной.

### UnBase64(str s) buf

Функция *UnBase64* преобразует строку в кодировке **base64** в значение типа *buf* и возвращает его.

### UnHex(str s) buf

Функция *UnHex* преобразует шестнадцатеричную строку в значение типа *buf* и возвращает его. Входящая строка должна содержать только шестнадцатеричные символы.

### Write(buf b, int off, buf src) buf

Функция *Write* записывает массив байт переменной *src* в переменную *b* начиная с указанного смещения. Данные записываются поверх существующих значений. Функция возвращает переменную *b*.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/buffer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
