《【无限互联学员作品】C语言基于base64编码字符串》由会员分享,可在线阅读,更多相关《【无限互联学员作品】C语言基于base64编码字符串(5页珍藏版)》请在金锄头文库上搜索。
1、C语言基于 base64 编码字符串当想把字符串采用 base64 编码时,可以采用别人写好的 base64 编码头文件,我们在程序中引入头文件后就可以直接调用他们的方法这样很方便我们编写程序。下面是 base64 代码#include const char base = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=; char* base64_encode(const char* data, int data_len); char *base64_decode(const char* data, int d
2、ata_len); static char find_pos(char ch); /* 编码 */ char *base64_encode(const char* data, int data_len) /int data_len = strlen(data); int prepare = 0; int ret_len; int temp = 0; char *ret = NULL; char *f = NULL; int tmp = 0; char changed4; int i = 0; ret_len = data_len / 3; temp = data_len % 3; if (te
3、mp 0) ret_len += 1; ret_len = ret_len*4 + 1; ret = (char *)malloc(ret_len); if ( ret = NULL) printf(No enough memory.n); exit(0); memset(ret, 0, ret_len); f = ret; while (tmp = data_len) break; prepare = (prepare (3-i)*6) & 0x3F; *f = basechangedi; /printf(%.2X, changedi); f+; *f = 0; return ret; /*
4、 */ static char find_pos(char ch) char *ptr = (char*)strrchr(base, ch);/the last position (the only) in base return (ptr - base); /* */ char *base64_decode(const char *data, int data_len) int ret_len = (data_len / 4) * 3; int equal_count = 0; char *ret = NULL; char *f = NULL; int tmp = 0; int temp =
5、 0; char need3; int prepare = 0; int i = 0; if (*(data + data_len - 1) = =) equal_count += 1; if (*(data + data_len - 2) = =) equal_count += 1; if (*(data + data_len - 3) = =) /seems impossible equal_count += 1; switch (equal_count) case 0: ret_len += 4;/3 + 1 1 for NULL break; case 1: ret_len += 4;
6、/Ceil(6*3)/8)+1 break; case 2: ret_len += 3;/Ceil(6*2)/8)+1 break; case 3: ret_len += 2;/Ceil(6*1)/8)+1 break; ret = (char *)malloc(ret_len); if (ret = NULL) printf(No enough memory.n); exit(0); memset(ret, 0, ret_len); f = ret; while (tmp = (data_len - equal_count) break; prepare = (prepare (2-i)*8) & 0xFF); f+; *f = 0; return ret; 下面为测试代码:#include#includebase64Tools.hint main()char * p=你好啊!哈哈哈哈!abc!;char *c,*b;/编码c=base64_encode(p,strlen(p);printf(%s,c);/解码b=base64_decode(c,strlen(c);printf(%s,b);free(b);free(c);return 0;这样相当于把 base64 编码给封装了一下,方便其他程序调用。