本文地址:http://blog.csdn.net/morewindows/article/details/11922519转载请标明出处,谢谢。
欢迎关注微博:http://weibo.com/MoreWindows
本系列一共四篇:
1. 《Base64系列第一篇 Base64介绍》
2. 《Base64系列第二篇 python中使用Base64编码解码》
3. 《Base64系列第三篇 C/C++中使用Base64编码解码(使用boost库)》
4. 《Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)》
本篇《Base64系列第三篇 C/C++中使用Base64编码解码(使用boost库)》将介绍如何使用boost库来完成Base64的编码解码
由于boost库良好的封装,所以使用boost来完成Base64编码解码非常方便,下面直接上代码了:
// Base64系列第三篇C/C++中使用Base64编码解码(使用boost库)
// by MoreWindows( http://blog.csdn.net/MoreWindows )
// 欢迎关注http://weibo.com/morewindows
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
bool Base64Encode(const string& input, string* output) {
typedef boost::archive::iterators::base64_from_binary<boost::archive::iterators::transform_width<string::const_iterator, 6, 8> > Base64EncodeIterator;
stringstream result;
copy(Base64EncodeIterator(input.begin()) , Base64EncodeIterator(input.end()), ostream_iterator<char>(result));
size_t equal_count = (3 - input.length() % 3) % 3;
for (size_t i = 0; i < equal_count; i++) {
result.put('=');
}
*output = result.str();
return output->empty() == false;
}
bool Base64Decode(const string& input, string* output) {
typedef boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<string::const_iterator>, 8, 6> Base64DecodeIterator;
stringstream result;
try {
copy(Base64DecodeIterator(input.begin()) , Base64DecodeIterator(input.end()), ostream_iterator<char>(result));
} catch(...) {
return false;
}
*output = result.str();
return output->empty() == false;
}
int main()
{
cout<<" Base64系列第三篇C/C++中使用Base64编码解码(使用boost库)"<<endl;
cout<<" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --"<<endl;
cout<<" - http://blog.csdn.net/morewindows/article/details/11922519 -"<<endl;
string input_str("MoreWindows - http://blog.csdn.net/morewindows?viewmode=contents ~!@#$%\r\n");
string base64_str, output_str;
cout<<"origin text: \n"<<input_str<<endl;
Base64Encode(input_str, &base64_str);
cout<<"encode: \n"<<base64_str<<endl;
Base64Decode(base64_str, &output_str);
cout<<"decode: \n"<<output_str<<endl;
return 0;
}
运行结果如下:
如果不想使用boost库,还可以参考《Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)》,这里将从大名鼎鼎的chromium库抽取代码,保证健壮高效的完成Base64编码解码。
本文地址:http://blog.csdn.net/morewindows/article/details/11922519转载请标明出处,谢谢。
欢迎关注微博:http://weibo.com/MoreWindows