Вопрос

ascii85 имеет функцию для получения максимальной длины кодировки. MaxEncodedLen().

Я думаю, что у него должна быть функция для получения длины при декодировании, как в Base64.

http://golang.org/pkg/encoding/ascii85/

Это было полезно?

Решение

Вот функция для расчета Go package ascii85 MaxDecodedLen() для n закодированные байты.

func MaxDecodedLen(n int) int {
    const binWordLen = 4
    return n * binWordLen
}

Если все четыре байта незакодированной группы равны нулю, они представлены одним байтом, символом z, вместо пяти восклицательных знаков (!!!!!).В некоторых реализациях незакодированная группа пробелов может быть представлена ​​одним символом. y.

ascii85.Decode(), В отличие от ascii85.Encode(), имеет количество израсходованных байтов (nsrc) и flush параметры, помимо количества записанных байтов (ndst) параметр, который позволяет программисту декодировать несколько блоков или один блок по частям.Следовательно, буфер назначения меньше, чем MaxDecodedLen() может быть использовано.

Другие советы

На мой взгляд, при кодировании MaxencodedLen () является обязательным для знания количества байтов, необходимых для удержания закодированного выхода (т.е. размер буфера назначения).
Где в случае декодирования вызывающий абонент может пройти пункт назначения размера, равный источнику буфера, хотя буфер назначения может быть меньшим размером.
Кроме того, мы можем использовать исходный источник, т.е. просто некодируемый размер буфера, если контекст выполнения / область действия кодирования и декодирования одинаковы. Следовательно, ожидаемая функция, MaxDecodedLen () не является обязательным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top