// 在VC6.0下建一个控制台程序
#include
"
stdafx.h
"
#include
<
string
>
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
#ifdef _WIN32
#pragma warning(disable:
4514
)
#endif
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
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);
};
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
static const std::string base64_chars
=
"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
"
"
abcdefghijklmnopqrstuvwxyz
"
"
0123456789+/
"
;
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
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;
}
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
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;
}
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
int
main(
int
argc,
char
*
argv[])
{
string str
=
"
http://blog.csdn.net
"
;
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());
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
return
0
;
}
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)