Base64系列第三篇 C/C++中使用Base64编码解码(使用boost库)

本文地址: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   

 

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值