进行Base64解码操作时需要预先分配多少字节的内存空间?
Base64解码预分配内存大小计算
Base64编码的核心规则是每3字节原始数据会被编码为4个可打印字符,因此解码时输出数据的长度最多是输入字符串长度的3/4。
针对你使用的这套Base64解码器,系数SOMETHING直接取0.75就足够使用。如果希望避免浮点运算适配更多场景(比如无浮点运算单元的嵌入式环境),也可以不用系数,直接用整数运算计算缓冲区大小。
需要注意两个边界细节:
- 如果输入的Base64字符串末尾带
=填充符,实际输出长度会比3/4的计算值小1-2字节,上述分配规则已经完全覆盖该场景,不会出现内存溢出 - 如果解码后需要把输出当做C字符串使用,建议在计算基础上多分配1字节空间,主动补
\0避免越界访问
你给出的代码可以调整为两种合法写法:
- 系数写法:
unsigned char *buff = calloc(strlen(input_data) * 0.75 + 1, sizeof(unsigned char)); int len = Base64decode(buff, input_data); buff[len] = '\0'; // 按需补充字符串终止符
- 整数运算写法(更推荐):
size_t input_len = strlen(input_data); size_t buff_size = (input_len + 3) / 4 * 3 + 1; // +1 预留字符串终止符位置 unsigned char *buff = calloc(buff_size, sizeof(unsigned char)); int len = Base64decode(buff, input_data);
内容的提问来源于stack exchange,提问作者weyh
相关产品推荐
相关产品推荐

