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   

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值