009-libb64 迅速上手 libb64 -C++开源库108杰
迅速上手 lib64,轻轻松松在 C++ 开发库上再下一城: base64 编解码。
1 简介
libb64 是个有点年纪的 base64 编解码库。
- 官方主页:https://libb64.sourceforge.net
- 第三方帮助克隆到 github:GitHub - libb64/libb64: A fork of http://libb64.sourceforge.net/ with patches and new functions
其中 github 上的代码有所修改,目的是为了支持能得到“不换行”的base64编码,但其做法(很)不好,建议有此需求的同学,可参考本课堂附录一给出的改进。
归纳起来,libb64有三个主要特点:
- 性能保障: 使用了 C 语言 BUG 一样的 “魔法协程”,即:利用在 switch 结构中跨 case 分支存在的 while 循环,以实现一个普通函数可以类似一个协程,支持保持状态的函数重入(示例代码见本课堂附录二);
- 完全自由使用,零协议。“you can take it and do whatever you want with it”;
- 核心代码使用 C 实现,同时提供简捷的 C++ 封装。
2 安装
- msys2/UCRT64 环境:
pacman -S mingw-w64-ucrt-x86_64-libb64
- msys2/mingw64 环境 :
pacman -S mingw-w64-x86_64-libb64
3. libb64 C++接口
// 头文件
#include <b64/encode.h> // 编码
#include <b64/decode.h> // 解码// 编码(bin → base64):
void base64::encoder::encode(std::istream& is, std::ostream& os);
// 解码(base64 → bin):
void base64::decoder::decode(std::istream& is, std::ostream& os);
C++接口,编码解码均使用流作为参数。参数1为输入流,用于从中得到原数据,参数2为输出流,用于输出编码结果。因此,官网上给出的最简单的编码例子是:
base64::encoder er;
er.encode(std::cin, std::cout);
4. 项目实践视频
014-libB64-认识、安装、上手 libB64