题
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()时,必须知道保存编码输出所需的字节数(IE目标缓冲区大小)。
在解码的情况下,呼叫者可以通过大小的目标缓冲区等于源缓冲区,尽管目标缓冲区的大小较小。
另外,如果执行上下文/编码和解码的范围相同,我们可以使用原始源IE IE普通的非编码缓冲区大小。因此,预期函数MaxDecodedLen()是可选的。
不隶属于 StackOverflow