王骏的BLOG
编程、网络技术点滴...
<2007年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
公告

留言簿(26)

随笔分类

随笔档案

文章分类

文章档案

相册

WEB开发

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-65 文章-5 评论-252 Trackbacks-0
#include "stdafx.h"
#include 
<string>

using namespace std;

#ifdef _WIN32
#pragma warning(disable:
4514)
#endif

class Base64
{
public:
    static inline bool is_base64(unsigned 
char c) {
        
return (isalnum(c) || (c == '+') || (c == '/'));};
    static std::string base64_encode(unsigned 
char const* , unsigned int len);
    static std::string base64_decode(std::string const
& s);
};

static const std::string base64_chars 
= 
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";

std::string Base64::base64_encode(unsigned 
char const* bytes_to_encode, unsigned int in_len) {
    std::string ret;
    
int i = 0;
    
int j = 0;
    unsigned 
char char_array_3[3];
    unsigned 
char char_array_4[4];
    
    
while (in_len--) {
        char_array_3[i
++= *(bytes_to_encode++);
        
if (i == 3) {
            char_array_4[
0= (char_array_3[0& 0xfc>> 2;
            char_array_4[
1= ((char_array_3[0& 0x03<< 4+ ((char_array_3[1& 0xf0>> 4);
            char_array_4[
2= ((char_array_3[1& 0x0f<< 2+ ((char_array_3[2& 0xc0>> 6);
            char_array_4[
3= char_array_3[2& 0x3f;
            
            
for(i = 0; (i <4) ; i++)
                ret 
+= base64_chars[char_array_4[i]];
            i 
= 0;
        }
    }
    
    
if (i)
    {
        
for(j = i; j < 3; j++)
            char_array_3[j] 
= '0';
        
        char_array_4[
0= (char_array_3[0& 0xfc>> 2;
        char_array_4[
1= ((char_array_3[0& 0x03<< 4+ ((char_array_3[1& 0xf0>> 4);
        char_array_4[
2= ((char_array_3[1& 0x0f<< 2+ ((char_array_3[2& 0xc0>> 6);
        char_array_4[
3= char_array_3[2& 0x3f;
        
        
for (j = 0; (j < i + 1); j++)
            ret 
+= base64_chars[char_array_4[j]];
        
        
while((i++ < 3))
            ret 
+= '=';
        
    }
    
    
return ret;
}

std::string Base64::base64_decode(std::string const
& encoded_string) {
    
int in_len = encoded_string.size();
    
int i = 0;
    
int j = 0;
    
int in_ = 0;
    unsigned 
char char_array_4[4], char_array_3[3];
    std::string ret;
    
    
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
        char_array_4[i
++= encoded_string[in_]; in_++;
        
if (i ==4) {
            
for (i = 0; i <4; i++)
                char_array_4[i] 
= base64_chars.find(char_array_4[i]);
            
            char_array_3[
0= (char_array_4[0<< 2+ ((char_array_4[1& 0x30>> 4);
            char_array_3[
1= ((char_array_4[1& 0xf<< 4+ ((char_array_4[2& 0x3c>> 2);
            char_array_3[
2= ((char_array_4[2& 0x3<< 6+ char_array_4[3];
            
            
for (i = 0; (i < 3); i++)
                ret 
+= char_array_3[i];
            i 
= 0;
        }
    }
    
    
if (i) {
        
for (j = i; j <4; j++)
            char_array_4[j] 
= 0;
        
        
for (j = 0; j <4; j++)
            char_array_4[j] 
= base64_chars.find(char_array_4[j]);
        
        char_array_3[
0= (char_array_4[0<< 2+ ((char_array_4[1& 0x30>> 4);
        char_array_3[
1= ((char_array_4[1& 0xf<< 4+ ((char_array_4[2& 0x3c>> 2);
        char_array_3[
2= ((char_array_4[2& 0x3<< 6+ char_array_4[3];
        
        
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
    }
    
    
return ret;
}

int main(int argc, char* argv[])
{
    string str 
= "VC知识库 vckbase.com";
    
    string str1 
= Base64::base64_encode((const unsigned char *)str.c_str(), str.length()); // BASE64编码
    string str2 = Base64::base64_decode(str1);// BASE64解码

    printf(
"%s  ", str1.c_str());
    printf(
"%s  ", str2.c_str());    

    
return 0;
}
posted on 2007-12-18 17:07 王骏的BLOG 阅读(681) 评论(4)  编辑 收藏
Comments
  • # re: BASE64编码与解码(Base64Encode,Base64Decode)
    bvcb
    Posted @ 2008-01-18 11:21
    [URL=http://www.zyydjx.com/about.htm]制袋机[/URL] [URL=http://www.hu-song.cn/eKultur.htm">http://www.hu-song.cn/eKultur.htm]die cutting machine[/URL] [URL=http://www.hu-song.cn/eKultur.htm">http://www.hu-song.cn/eKultur.htm]auto slitting machine[/URL] [URL=http://www.hu-song.cn/eabout.htm]flexo printing machine[/URL] [URL=http://www.cnxinye.com]bag-making machine[/URL] [url=http://www.cnxinda.cn]制袋机[/url] [url=http://www.cnxinda.cn/lianx.htm]吹膜机[/url] [url=http://www.chuangsj.com/myshow.asp]GOOGLE排名[/url] [url=http://www.zjbeiyin.com]压痕机[/url][url=http://www.gxysjx.com">http://www.gxysjx.com]印刷机[/url] [url=http://www.gxysjx.com">http://www.gxysjx.com]吹膜机[/url] [url=http://www.65137889.com">http://www.65137889.com]印刷机械[/url] [url=http://www.65137889.com">http://www.65137889.com]凹版印刷机[/url] [url=http://www.dong-hai.net]印刷机[/url]
  • # re: BASE64编码与解码(Base64Encode,Base64Decode)
    bvcb
    Posted @ 2008-01-18 11:21
    [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com]丝印机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com]丝网印刷机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com]全动丝印机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/101.asp]网印机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/101.asp]晒版机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/101.asp]拉网机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/202.asp]UV光固机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/202.asp]光固机[/url] [url=http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com">http://www.lgxinfeng.com/202.asp]胶印光固机[/url] [URL=http://www.zyydjx.com">http://www.zyydjx.com]吹膜机[/URL] [URL=http://www.zyydjx.com">http://www.zyydjx.com]制袋机[/URL]
  • # re: BASE64编码与解码(Base64Encode,Base64Decode)
    bvcb
    Posted @ 2008-01-18 11:22
    <a href="http://www.lgxinfeng.com">丝印机</a> <a href="http://www.lgxinfeng.com">丝网印刷机</a> <a href="http://www.lgxinfeng.com">全动丝印机</a> <a href="http://www.lgxinfeng.com/101.asp">网印机</a> <a href="http://www.lgxinfeng.com/101.asp">晒版机</a> <a href="http://www.lgxinfeng.com/101.asp">拉网机</a> <a href="http://www.lgxinfeng.com/202.asp">UV光固机</a> <a href="http://www.lgxinfeng.com/202.asp">光固机</a> <a href="http://www.lgxinfeng.com/202.asp">胶印光固机</a> <a href="http://www.zyydjx.com">吹膜机</a> <a href="http://www.zyydjx.com">制袋机</a> <a href="http://www.zyydjx.com/about.htm">制袋机</a><a href="http://www.hu-song.cn/eabout.htm">label printing machine</a> 
  • # re: BASE64编码与解码(Base64Encode,Base64Decode)
    bvcb
    Posted @ 2008-01-18 11:22
    <a href="http://www.hu-song.cn/eabout.htm">flexo printing machine</a> <a href="http://www.hu-song.cn/eKultur.htm">auto slitting machine</a> <a href="http://www.cnxinye.com">bag-making machine</a> <a href="http://www.hu-song.cn/eKultur.htm">die cutting machine</a> <a href="http://www.cnxinda.cn">制袋机</a> <a href="http://www.cnxinda.cn/lianx.htm">吹膜机</a><a href="http://www.chuangsj.com/myshow.asp">GOOGLE排名</a> <a href="http://www.zjbeiyin.com">压痕机</a> <a href="http://www.gxysjx.com">印刷机</a> <a href="http://www.gxysjx.com">吹膜机</a> <a href="http://www.65137889.com">印刷机械</a> <a href="http://www.65137889.com">凹版印刷机</a> <a href="http://www.dong-hai.net">印刷机</a> 
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]