#include"stdafx.h"#includeusing namespace std;
#ifdef _WIN32
#pragma warning(disable:4514)
#endif
class Base64
{
public:
static inline bool is_base64(unsignedcharc) {return(isalnum(c)||(c=='+')||(c=='/'));};
static std::string base64_encode(unsignedcharconst*, unsignedintlen);
static std::string base64_decode(std::string const&s);
};
static const std::string base64_chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ""abcdefghijklmnopqrstuvwxyz""0123456789+/";
std::string Base64::base64_encode(unsignedcharconst*bytes_to_encode, unsignedintin_len) {
std::string ret;inti=0;intj=0;
unsignedcharchar_array_3[3];
unsignedcharchar_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
ret+=base64_chars[char_array_4[j]];while((i++<3))
ret+='=';
}returnret;
}
std::string Base64::base64_decode(std::string const&encoded_string) {intin_len=encoded_string.size();inti=0;intj=0;intin_=0;
unsignedcharchar_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
}returnret;
}intmain(intargc,char*argv[])
{
string str="VC知识库";
string str1=Base64::base64_encode((const unsignedchar*)str.c_str(), str.length());//BASE64编码string str2=Base64::base64_decode(str1);//BASE64解码printf("%s", str1.c_str());
printf("%s", str2.c_str());return0;
}