Получить длину для декодирования Ascii85
Ascii85 имеет функцию, чтобы получить максимальную длину кодирования MaxEncodedLen()
,
Я думаю, что он должен иметь слишком функцию, чтобы получить длину при декодировании, как в Base64.
2 ответа
Вот функция для расчета 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() является необязательной.