您的位置:首页 > 编程语言

实现base64编码的C代码

2007-11-28 17:40 387 查看
近日做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;
.....

重新测试,一切正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 测试 exe 工作