获得解码Ascii85的长度

时间:2010-04-29 10:36:18

标签: go decode base85

ascii85具有获取编码MaxEncodedLen()的最大长度的函数。

我认为它应该有一个函数来获得解码时的长度,就像它在Base64中一样。

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

2 个答案:

答案 0 :(得分:0)

在我看来,编码MaxEncodedLen()必须知道保存编码输出所需的字节数(即目标缓冲区大小)。
在解码的情况下,调用者可以传递大小等于源缓冲区的目标缓冲区,尽管目标缓冲区的大小可以较小。
或者,如果编码和解码的执行上下文/范围相同,我们可以使用原始源,即普通的非编码缓冲区大小。 因此,期望的函数MaxDecodedLen()是可选的。

答案 1 :(得分:0)

这是为MaxDecodedLen()个编码字节计算Go package ascii85 n的函数。

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

如果未编码组的所有四个字节都为零,则它们由单个字节(字符z)表示,而不是由五个感叹号(!!!!!)表示。在一些实现中,未编码的空间组可以由单个字符y表示。

ascii85.Decode()不同,

ascii85.Encode()除了写入的字节数(nsrc外,还有消耗的字节数(flush)和ndst个参数。 )参数,允许程序员逐块解码多个块或单个块。因此,可以使用小于MaxDecodedLen()的目标缓冲区。