实现base64编码的C代码

在进行SMTP程序开发过程中,作者遇到Base64编码导致的邮件附件发送失败问题。问题在于编码函数通过strlen计算数据长度,无法正确处理含有'/0'字节的二进制文件。通过增加指定数据长度的参数解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日做SMTP相关程序,在网上搜到一比较精简的base64编码的 C源代码,测试心切也就未细看源码,直接使用了。

刚开始,编码、解码都工作正常,遂测试容量较大的EXE的附件,发现发送附件失败。逐步排查错误,发现是base64编码函数有问题,它是以char*作为参数接收要编码,解码的流数据:

 char* base64_encode(const char *data) {
   char *ret, *retpos;
   int n, m, padnum = 0, retsize, dlen = strlen(data);/
..........
在对传出的返回值分配空间时是根据strlen函数计算传入的流数据的参数,如果流数据中间有'/0'字节,则计算出来的长度肯定就不对了,但是二进制文件中肯定存在值为'/0'的字节啊。

于是自己检查代码,发现BASE64代码转换是逐位转换,遍历长度如果不正确,则输出肯定不正确,遂修改该函数,增加一个参数来说明传入流数据的长度:

 char* base64_encode(const char *data,long c_size) {
   char *ret, *retpos;
   int n, m, padnum = 0, retsize, dlen = c_size;
.....

重新测试,一切正常。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值