【转】VC Base64编解码
来源:互联网 发布:矢量网络分析仪端口 编辑:程序博客网 时间:2024/05/16 18:42
#include <afx.h>
#include <stdio.h>
unsigned char * base64=(unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// 编码
CString Base64Encode(CString src, int srclen)
{
int n, buflen, i, j;
CString buf = src;
static unsigned char *dst;
buflen = n = srclen;
dst = (unsigned char*) malloc( buflen / 3 * 4 + 3 );
memset( dst, 0 , buflen / 3 *4+3);
for( i = 0,j = 0; i <= buflen-3 ; i+=3, j+=4)
{
dst[j] = (buf[i] & 0xFC) >> 2;
dst[j+1] = ((buf[i] & 0x03) << 4) + (( buf[i+1] & 0xF0) >> 4);
dst[j+2] = ((buf[i+1] & 0x0F) << 2) + ((buf[i+2] & 0xC0) >> 6);
dst[j+3] = buf[i+2] & 0x3F;
}
if(n%3==1)
{
dst[j] = (buf[i] & 0xFC) >> 2;
dst[j+1] = ((buf[i] & 0x03) << 4);
dst[j+2] = 64;
dst[j+3] = 64;
j+=4;
}
else if( n % 3 == 2)
{
dst[j] = (buf[i] & 0xFC) >> 2;
dst[j+1] = ((buf[i] & 0x03) << 4)+(( buf[i+1] & 0xF0) >> 4);
dst[j+2] = ((buf[i+1] & 0x0F) << 2);
dst[j+3] = 64;
j+=4;
}
for(i=0;i<j;i++)
{
dst[i] = base64[ (int)dst[i] ];
}
dst[j] = 0;
return CString(dst);
}
// 解码
CString Base64Decode(CString inpt, int *len)
{
int n, i, j, pad;
unsigned char *p;
static unsigned char *dst;
unsigned char * src;
*len = 0;
pad = 0;
n = inpt.GetLength();
src = new unsigned char [n];
for( i = 0; i < n; i++)
{
src[i] = inpt[i];
}
while( n > 0 && src[n-1] == '=')
{
src[n-1] = 0;
pad++;
n--;
}
for(i=0;i<n;i++)
{
p = (unsigned char *)strchr( (const char *)base64, (int)src[i]);
if(!p)
break;
src[i] = p-(unsigned char *)base64;
}
dst = (unsigned char *)malloc( n*3/4+1);
memset( dst, 0, n*3/4 +1);
for( i = 0,j = 0; i < n; i += 4,j += 3)
{
dst[j] = (src[i] << 2) + ((src[i+1] & 0x30) >> 4);
dst[j+1]=((src[i+1] & 0x0F) << 4) + ((src[i+2] & 0x3C) >> 2);
dst[j+2]=((src[i+2] & 0x03) << 6) + src[i+3];
*len += 3;
}
*len -= pad;
return CString(dst);
}
源码下载:http://yunpan.cn/Qt4AJxziqKMTV
- 【转】VC Base64编解码
- C++ VC Base64编解码算法系列三(解码算法)
- Base64编解码(C++版) (转)
- VB Base64编解码
- Base64编解码原理
- BASE64编解码
- openssl base64 编、解码
- base64编解码
- Java:Base64编解码
- Base64编解码
- Base64编解码(C)
- Base64编解码(JS)
- base64编解码
- android base64编解码
- BASE64编解码
- BASE64编解码
- base64编解码
- base64编解码
- [原]VC SOCKET实现多线程并发连接
- [原]VC实现修改文件创建、访问、修改时间属性
- [原]极域电子教室3个没被发现的bug(V6 2007)
- Java调试器--jdb.exe
- [原]极域电子教室V6 2007通信协议解析(一)
- 【转】VC Base64编解码
- MSG_NOSIGNAL
- mysql几个特殊有用的命令
- Iphone开发(六)IOS中的通知--操作表ActionSheet和警报AlertView
- perl基础知识06【转义与元字符与特殊字符】
- netTcpBinding 客户端和服务端配置文件
- PPP协议
- 高校数字化校园与网站群
- 被误解的 Node.js