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

boost库实现Base64编解码   Base64介绍 Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转换为四字节,如果数据的长度不是3的整数倍,就要在后面补0再计算,每补2个0就再Base64串后加上1个‘=’。 boost库Base64 boost库对Base64编解码进行很了很好的封装,以下代码用boost库实现Base64编解码 //boost库引用文件... 阅读详情

本文地址:http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/MoreWindows ) --"<<endl;
  cout<<" - http://blog.youkuaiyun.com/morewindows/article/details/11922519 -"<<endl;

  string input_str("MoreWindows - http://blog.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/11922519转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows   

 

Base64系列第三篇 C/C++中使用Base64编码解码 使用boost库 阅读详情

相关推荐

C++ Base64编码解码实战:cpp-base64库核心原理与高性能应用指南

Base64编码是一种将二进制数据转换为ASCII字符的编码方案,广泛应用于网络传输、数据存储和配置文件等场景。其核心原理是将每3个字节(24位)数据分割为4个6位单元,并映射到64个特定字符表。这种编码技术的主要价值在于能在纯文本环境中安全传输二进制数据,避免特殊字符引起的协议冲突。在工程实践中,Base64常用于HTTP认证头、电子邮件附件、图片内嵌(如data URI scheme)以及系统间二进制数据交换。针对C++项目,cpp-base64库提供了RFC 4648标准兼容的实现,支持标准Base6

weixin_33861800的博客 437

C++ Boost库实现 Base64编解码

C++Base64编解码 实现

勤又氪猿的博客 2994

C++实现图片Base64编码解码:从原理到工程实践

Base64编码是一种将二进制数据转换为ASCII文本字符串的编码方案,其核心原理是将每3个字节(24位)的二进制数据重新打包为4个可打印字符。这项技术解决了二进制数据在纯文本协议(如JSON、XML、HTTP)中传输和存储的难题,具有广泛的技术价值。在Web开发、数据序列化和资源内嵌等应用场景中,Base64编码确保了数据的完整性与可读性。本文聚焦于C++工程实践,详细解析如何手动实现二进制图片数据与Base64字符串之间的互转,涵盖了核心算法、文件IO操作以及性能优化等关键环节,并深入探讨了内存管理和边

weixin_34211761的博客 346

C/C++中使用Base64编码解码(使用boost库)

Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转四字节。 如将字符串“Man”用Base64编码。 如果数据的长度不是3的整数倍,就要在后面补0再计算,每补2个0就在Base64串后加上1个‘=’。 Base64编码表如下:   Base64的不足之处 标准的Base64并不适合直接放在URL里传输,因为URL编码器

喻大帅的软件工作室 1万+

C++实现Base64编解码:原理、优化与工程实践

数据编码是计算机科学中处理数据表示与传输的基础技术,其核心原理在于将信息从一种格式转换为另一种格式,以确保在不同系统或协议间的兼容性与安全性。Base64编码作为一种经典的二进制到文本的编码方案,通过将每3个字节(24位)数据映射为4个可打印ASCII字符,巧妙地解决了二进制数据在纯文本环境(如电子邮件、JSON、XML)中传输和存储的难题。这项技术的工程价值在于其广泛的应用场景,例如在HTTP协议中嵌入认证信息、在Data URL方案内嵌图片以减少网络请求,或在日志系统中安全输出二进制数据。本文以C++语

weixin_30861459的博客 389

C++高性能JWT库JWT-CPP实战:从集成到生产环境部署

JSON Web Token(JWT)是一种用于安全传输声明的开放标准,广泛应用于现代Web服务与分布式系统的身份认证与授权。其核心原理是基于JSON格式的令牌,通过数字签名确保信息的完整性和不可篡改性,实现了无状态会话管理。在C++高性能开发领域,集成JWT功能常面临生态库选择少、依赖复杂的挑战。JWT-CPP作为一个header-only库,以其零依赖集成、全面的算法支持和灵活的JSON后端适配能力,为C++项目提供了高效、安全的JWT解决方案。该库支持HMAC、RSA、ECDSA等主流签名算法,并能无

weixin_33889665的博客 435

Boost 图片/文件转base64编码

Boost 图片/文件转base64编码1. Boost的Base642. 实例3. 总结 1. Boost的Base64 Boost实现了base64的编码,包含在头文件: #include "boost/archive/iterators/binary_from_base64.hpp" #include "boost/archive/iterators/base64_from_binary.hpp" #include "boost/archive/iterators/transform_width.h

小小的进步 1041

各种加密解密实现(Base64加密、MD5、SHA、AES RAS等)

各种加密解密的实现,包含(Base64加密、MD5、SHA、AES RAS等)

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

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

qq_43678306的博客 365

Win11桌面图标小箭头去除与恢复:解决任务栏关联错误的完整指南

本文提供了一份完整的Win11桌面图标小箭头去除与恢复指南,重点解决了因错误方法导致的任务栏关联错误问题。通过分析注册表中IsShortcut键值与Shell Icons的原理,推荐安全的“替换图标资源法”,并提供了可一键执行的批处理脚本,确保在美化桌面的同时不影响系统功能与默认应用设置。

weixin_29288313的博客 944

【Unity3D】RTS Engine 笔记一

RTS Engine 中配置一个新场景, 初步认识GameManager、设置地形以及配置地形网格搜索

ViYeye的博客 1650

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

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

MoreWindows Blog 3万+

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 489

Base64系列第一篇 Base64介绍

Base64系列第一篇 Base64介绍

ffygvf的博客 145

OpenAI,从推出更强大的Sora 2模型展开探索与未来发展前景+部署方法大全+文末邀请码*12

摘要 OpenAI推出的Sora 2是第二代AI视频生成模型,在多模态内容生成领域实现重大突破。文末足足有12个邀请码,速来速享!!!

aqfcca的博客 2248

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

sv 937

C++实现base64编码

将昨天的php代码改造成C++ /*base_64.h文件*/ #ifndef BASE_64_H #define BASE_64_H /** * Base64 编码/解码 * @author liruixing */ class Base64{ private: std::string _base64_table; static cons...

398

Caffeine:为每个元素动态设置过期时间

Caffeine利用expireAfter方法实现为每个元素动态设置过期时间

大数据开发、JAVA开发、人工智能AI 1万+

base64 编码 在websocket协议中的应用

base64 编码 在websocket协议中的应用 一 、base64作用 1、参数传输的过程中使用 2、传输二进制图片,可以将字符直接插入页面中 3、基于64个可打印的字符转换表示二进制的数据 二、缺陷 1、明显会增长数据的量,尤其是图片转化,增长三分之一左右,这个量其实不小了 三、代码 show me the code 我们知道websocket协议建立在http协议基础之上,实现websocket协议前面要实现一段http协议代码,然后upgrade,在websocket协议中,RFC6455 文档

qianbo042311的博客 1421

运动控制软件:Siemens Sinamics二次开发_(6).通信接口与协议详解

PROFIBUSPROFINETModbus TCPCANopenEtherCAT每种通信接口都有其特定的应用场景和优势。选择合适的通信接口可以显著提高系统的性能和可靠性。在选择通信协议时,需要根据具体的应用场景和需求综合考虑。每种通信协议都有其特定的优势和局限性,因此在设计运动控制系统时,应选择最适合的协议,以确保系统的性能、可靠性、成本和维护性。通过以上对比和分析,希望开发者能够更好地理解和选择适合的通信接口和协议,从而优化运动控制系统的开发和应用。

2401_87715305的博客 899

QT自制TCP服务器

TCP服务器 网络调试助手

大脑曝光 3626

自己用过的好用的C++第三方库汇总

目录 综合库 Boost 网络库 cpp-httplib 简介 链接 工具库 cpp-base64 简介 链接 综合库 Boost 官网地址:https://www.boost.org/ 编译好的库下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/ 网络库 cpp-httplib 简介 一个C++ 11只包含头文件的跨平台HTTP/HTTPS库。 设置非常容易。 只需在代码中包含htt.

xuyouqiang1987的博客 5293

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++学习之Base64

一般是不会用string来存储内存的内容的,而是用unsigned char*来做这样的事情。 但是如果图方便要用string来表达内存的内容就要用到base64,下面是我用到的一段代码,整理一下备忘。 #include #include #include using namespace std;  // base64 tables static char ba

Coder 1337

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++ POCO库(访问数据库,版本问题,本人配置失败)

官网下载源码:https://pocoproject.org/ 一、POCO库简介 学习一个框架前,要先明白它的是什么,为什么,怎么用.下面这些文字,是从中文poco官网上转过来的,正如poco c++库的特点,非常清晰,代码风格更是一目了然. poco开发库的特点,非常适合写后台处理程序,效率也是很高的.前台界面程序使用Qt框架库,非常好,两个库相辅相成,可解决项目上的大部分问题. ...

csdndenglu的专栏 2390

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Base64系列第一篇 Base64介绍
下一篇: Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值