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