BASE64 编码/解码
1.1. BASE64 编码/解码概述
Base64 是网络上传输 8 位字节码时最常用的编码方式之一,是一种基于 64 个可打印字符来表示二进制数据的方法。EASY EAI api 对 BASE64 编码/解码工具进行了封装并提供给用户,使用户可以方便地对数据进行 BASE64 封装。
1.2. 快速开始
1.2.1 开发环境准备
在 PC 上的 Ubuntu 系统中执行 run 脚本,进入 EASY-EAI 编译环境。详细如下。
cd ~/develop_environment./run.sh 22041.2.2 下载源码并编译示例
在 EASY-EAI 编译环境下,创建用于管理源码仓库的目录。
cd /optmkdir EASY-EAI-Toolkitcd EASY-EAI-Toolkithttps://dl.dragonwake.com/download/rv1126b/embedded/EASY-EAI-Toolkit-1126B/Demos.zip
从上述链接下载 Demos.zip 压缩文件,并上传到虚拟机的 /opt/EASY-EAI-Toolkit 目录中后解压。 进入对应示例目录并执行编译操作。具体命令如下。
cd EASY-EAI-Toolkit-1126B/Demos/common-base64/./build.sh💡 注意:由于依赖库放置在开发板上,交叉编译过程中请务必保持 /mnt 挂载。

1.2.2 下载源码并编译示例 图17
1.2.3 运行示例
通过串口调试或 SSH 调试进入开发板后台,并移动到示例所在位置。如下所示。
cd /userdata/Demo/common-base64运行示例的命令如下。
./test-base641.2.4 运行结果
运行结果如下所示。

1.2.4 运行结果 图18
1.3. BASE64 编码/解码 API 说明
1.3.1 包含/引用方式
EASY EAI api 库位于本仓库的 easyeai-api 目录中。为了方便用户在本地项目中直接调用 EASY EAI api 库,下面列出了项目中需要链接的库、头文件等内容。
| 说明 | CMake 中的写法 | Makefile 中的写法 |
|---|---|---|
| api.cmake | ${common_root}/base64/api.cmake | 无 |
| 头文件目录 | ${BASE64_INCLUDE_DIRS} | -I ../../easyeai-api/common/base64 |
| 源文件目录 | ${BASE64_SOURCE_DIRS} | ../../easyeai-api/common/base64 |
| 库文件目录 | 无 | 无 |
| 库链接参数 | ${BASE64_LIBS} | 无 |
API 源代码路径为 EASY-EAI-Toolkit-1126B/easyeai-api/common/base64/。用户可以通过源码查看接口的实现,也可以直接修改源码。
1.3.2 BASE64 编码操作
编码函数原型如下。
int32_t base64_encode(char \*out_data, const char\* in_data, unsigned int in_len);具体说明如下。
| 函数名:base64_encode() | 详情 |
|---|---|
| 头文件 | easyeai-api/common/base64/base64.h |
| 输入参数 | out_data:编码后的 BASE64 数据 in_data:编码前的原始数据 in_len:原始数据中需要进行编码部分的长度 |
| 返回值 | 编码后生成的 BASE64 字符串长度 |
| 注意事项 | 通常编码后的数据大小至少会比编码前的数据增加 1/3。具体来说,会变为将输入数据大小向上取整到 3 的倍数后所得大小的 4/3。 |
1.3.3 BASE64 解码操作
解码函数原型如下。
int32_t base64_decode(char \*out_data, unsigned int out_len, const char\* encoded_string);具体说明如下。
| 函数名:base64_decode() | 详情 |
|---|---|
| 头文件 | easyeai-api/common/base64/base64.h |
| 输入参数 | out_data:解码后的数据 out_len:用于存放解码后数据的内存最大长度 encoded_string:待解码的数据(字符串) |
| 返回值 | 解码后得到的数据长度 |
| 注意事项 | 无 |
1.4. BASE64 操作 API 使用示例
示例代码路径为 EASY-EAI-Toolkit-1126B/Demos/common-base64/test-base64.c。
示例 1:将字符串进行 BASE64 编码,然后再对得到的编码数据进行解码。
char *cStr = "my name is hao";char base64_data[1024] = {0};char src_string[1024] = {0};memset(base64_data, 0, sizeof(base64_data));base64_encode(base64_data, cStr, strlen(cStr));printf("encode data : %s\n", base64_data);base64_decode(src_string, sizeof(src_string), base64_data);printf("source string : %s\n", src_string);示例 2:验证数据中包含 0x00 的情况,并确认还原后的数据 不会在 0x00 的位置被截断。
char num_data[8] = {0x67, 0x88, 0x70, '\0', '\r', '\n', 0x73,0x73};char decode_data[8] = {0};memset(base64_data, 0, sizeof(base64_data));base64_encode(base64_data, num_data, sizeof(num_data));printf("encode data : %s\n", base64_data);base64_decode(decode_data, sizeof(decode_data), base64_data);printf("source string : 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x0x%02x 0x%02x\n",decode_data[0], decode_data[1], decode_data[2], decode_data[3],decode_data[4], decode_data[5], decode_data[6],decode_data[7]);