我有一个std::string,它是base32编码的,我有一个函数对它进行解码。函数接受char*输入、char*目的地和长度我怎么知道目的地需要多长时间我需要知道为目标分配什么数组。我如何确定尺寸?
最佳答案
base32允许使用单个字符对每个5
位进行编码(如32 = 2^5
)。
这意味着您需要输出缓冲区大小来进行编码:
dst_size = src_size * 8 / 5 (1.6 times larger)
但由于base32字符串长度必须是40位的倍数:
dst_size = (src_size * 8 + 4) / 5
因此,对于解码(base32->二进制),所需的缓冲区大小是相应的
dst_size = ceil( src_size / 1.6 )