Кодировка Base64

Base64 Encoding — кодирование и декодирование данных в формат Base64

Краткое описание

#include <glib.h> gsize g_base64_encode_step (const guchar *in, gsize len, gboolean break_lines, gchar *out, gint *state, gint *save); gsize g_base64_encode_close (gboolean break_lines, gchar *out, gint *state, gint *save); gchar* g_base64_encode (const guchar *data, gsize len); gsize g_base64_decode_step (const gchar *in, gsize len, guchar *out, gint *state, guint *save); guchar* g_base64_decode (const gchar *text, gsize *out_len);

Описание

Base64 это кодировка которая позволяет кодировать последовательность произвольных байт в последовательность печатных ASCII символов. Для определения Base64, смотрите RFC 1421 или RFC 2045. Base64 в основном используется как кодировка передачи MIME для email.

GLib поддерживает возрастающую кодировку используя g_base64_encode_step() и g_base64_encode_close(). Возрастающее декодирование может быть выполнено с помощью g_base64_decode_step(). Для кодировки или декодирования данных в одном направлении, используйте g_base64_encode() или g_base64_decode().

Поддержка кодировки Base64 была добавлена в GLib 2.12.

Детали

g_base64_encode_step ()

gsize g_base64_encode_step (const guchar *in, gsize len, gboolean break_lines, gchar *out, gint *state, gint *save);

Возрастающее кодирование двоичных данных в строковое представление Base-64. Вызывая эту функцию многократно вы можете конвертировать данные в части избегая необходимости иметь полностью закодированные данные в памяти.

Когда все данные конвертированы вы должны вызвать g_base64_encode_close() для сброса на диск сохранённого состояния.

Буфер вывода должен быть достаточно большим чтобы вместить все данные которые будут в него записаны. Из=за способа кодирования base64 вам потребуется по крайней мере: len * 4 / 3 + 6 байт. Если вы включили прерывание строк (line-breaking) вам потребуется как минимум: len * 4 / 3 + len * 4 / (3 * 72) + 7 байт.

break_lines обычно используются когда данные закодированные в base64-кодировку помещаются в письма (emails). Это распределяет строки в 72 столбца, вместо помещения всего текста в одну строку, что позволяет избежать проблем с длинными строками в почтовой системе.

in : двоичные данные для кодирования.
len : длина in.
break_lines : прерываются ли длинные строки
out : указатель на буфер назначения
state : Сохраняемое состояние между этапами, начиная с 0
save : Сохраняемое состояние между этапами, начиная с 0
Возвращает : Количество записанных байт вывода

Начиная с версии 2.12


g_base64_encode_close ()

gsize g_base64_encode_close (gboolean break_lines, gchar *out, gint *state, gint *save);

Сбрасывает на диск состояние из последовательных вызовов g_base64_encode_step().

break_lines : прерываются ли длинные строки
out : указатель на буфер назначения
state : Сохраняемое состояние из g_base64_encode_step()
save : Сохраняемое состояние из g_base64_encode_step()
Возвращает : Количество записанных байт

Начиная с версии 2.12


g_base64_encode ()

gchar* g_base64_encode (const guchar *data, gsize len);

Кодирует последовательность двоичных данных в текстовое представление Base-64.

data : двоичные данные для кодирования.
len : длина data.
Возвращает : вновь распределённая, zero-завершённая строка в кодировке Base-64 представляющая данные data.

Начиная с версии 2.12


g_base64_decode_step ()

gsize g_base64_decode_step (const gchar *in, gsize len, guchar *out, gint *state, guint *save);

Возрастающее кодирование последовательности двоичных данных в текстовое представление Base-64. Вызывая эту функцию многократно вы можете конвертировать данные частями избегая необходимость иметь полностью закодированные данные в памяти.

Буфер вывода должен быть достаточно большим чтобы вместить все записываемые в него данные. Так как base64 кодирует 3 байта в 4 символа вам необходимо по крайней мере: len * 3 / 4 bytes.

in : двоичный ввод данных
len : максимальная длина данных in для декодирования
out : буфер вывода
state : Сохраняемое состояние между этапами, начиная с 0
save : Сохраняемое состояние между этапами, начиная с 0
Возвращает : Количество записанных байт вывода

Начиная с версии 2.12


g_base64_decode ()

guchar* g_base64_decode (const gchar *text, gsize *out_len);

Декодирует последовательность текстовой кодировки Base-64 в двоичные данные

text : zero-завершённая строка с текстом в кодировке base64 для декодирования.
out_len : здесь записывается длина декодированных данных.
Возвращает : вновь распределённый буфер который содержит двоичные данные представленные text

Начиная с версии 2.12