实现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;
.....
重新测试,一切正常。
刚开始,编码、解码都工作正常,遂测试容量较大的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;
.....
重新测试,一切正常。
相关文章推荐
- Base64在线编码解码实现代码 演示与下载
- 用XMLDOM和ADODB.Stream实现base64编码解码实现代码
- 用XMLDOM和ADODB.Stream实现base64编码解码实现代码
- base64编码及JNI实现,代码非原创,只做整理和实现JNI端交互
- Base64在线编码解码实现代码 演示与下载
- Javascript base64编码实现代码
- Base64在线编码解码实现代码 演示与下载
- 在java代码中将图片转变为base64位代码 并且在浏览器下展示base64编码的图片
- 关于base64编码的原理及实现
- Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码
- Base64编码java实现
- Base64加密解密原理以及代码实现
- UFIDL稀疏自编码代码实现及解释
- 通过将图片文件转换成Base64编码实现ajax提交图片
- C#实现Base64编码与解码
- 关于base64编码的原理及实现
- Base64编码原理解析与Java实现
- C#实现Base64编码与解码(二)
- 关于base64编码的原理及实现
- Base64编码原理与实现