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

原创 2013年10月29日 10:33:54

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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

boost库实现Base64编解码

boost库对Base64编解码进行很了很好的封装,以下代码用boost库实现Base64编解码 //boost库引用文件 #include #include #include //标准库 #i...
  • nk_wang
  • nk_wang
  • 2015年12月25日 23:32
  • 1877

Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)

本篇《Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)》将从大名鼎鼎的chromium库抽取代码,保证健壮高效的完成Base64编码解码。...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Base64系列第一篇 Base64介绍

Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转四字节。如将字符串“Man”用Base64编码。如果数据的长度不是3的整数倍,就要在后面补0再...

EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug

本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体。比如在对摄像...

C++实现图片的base64编码

1.base64编码的原因 网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能...
  • hei_ya
  • hei_ya
  • 2016年06月11日 20:29
  • 5106

C++使用AES+Base64算法对文本进行加密

使用AES算法和Base64实现具体的文本加密功能。 采用AES算法的CBC模式,16位秘钥,PKCS7Padding填充方案对文本进行加解密。此方案可防止一些比较关键的文本暴露, 也可以用于服务器...

BASE64编码和解码(VC源代码)

    BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。完整的BASE64定义可见 RFC1421和 RFC2045。编码后的数据比原始数据略长,为原来的4/3。在...
  • jhqin
  • jhqin
  • 2010年05月08日 07:23
  • 9585

BASE64编码和解码(VC源代码)

BASE64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。完整的BASE64定义可见 RFC1421和 RFC2045。编码后的数据比原始数据略长,为原来的4/3。在电子邮件...

C语言base64编码与解码

昨天工作中遇到需要将char *转换成base64的问题,把这块单独提取出来作为一个模块。 这里有几个参数需要解释一下: char *out:一块buffer的首地址,这块buffer就是用来存放...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Base64系列第三篇 C/C++中使用Base64编码解码(使用boost库)
举报原因:
原因补充:

(最多只允许输入30个字)