You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

进行Base64解码操作时需要预先分配多少字节的内存空间?

Base64解码预分配内存大小计算

Base64编码的核心规则是每3字节原始数据会被编码为4个可打印字符,因此解码时输出数据的长度最多是输入字符串长度的3/4。

针对你使用的这套Base64解码器,系数SOMETHING直接取0.75就足够使用。如果希望避免浮点运算适配更多场景(比如无浮点运算单元的嵌入式环境),也可以不用系数,直接用整数运算计算缓冲区大小。

需要注意两个边界细节:

  • 如果输入的Base64字符串末尾带=填充符,实际输出长度会比3/4的计算值小1-2字节,上述分配规则已经完全覆盖该场景,不会出现内存溢出
  • 如果解码后需要把输出当做C字符串使用,建议在计算基础上多分配1字节空间,主动补\0避免越界访问

你给出的代码可以调整为两种合法写法:

  1. 系数写法:
unsigned char *buff = calloc(strlen(input_data) * 0.75 + 1, sizeof(unsigned char));
int len = Base64decode(buff, input_data);
buff[len] = '\0'; // 按需补充字符串终止符
  1. 整数运算写法(更推荐):
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:06:05