1. BASE64編解碼簡介
Base64是網絡上最常見的用于傳輸8Bit字節碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數據的方法。EASY EAI api封裝了BASE64編解碼工具,方便用戶對數據進行BASE64封裝。
2. 快速上手
如果您初次閱讀此文檔,請閱讀:《入門指南/源碼管理及編程介紹/源碼工程管理》,按需管理自己工程源碼(注:此文檔必看,并建議采用【遠程掛載管理】方式,否則有代碼丟失風險!!!)。
2.1 源碼工程下載
先在PC虛擬機定位到nfs服務目錄,再在目錄中創建存放源碼倉庫的管理目錄:
cd ~/nfsroot mkdir GitHub cd GitHub
再通過git工具,在管理目錄內克隆遠程倉庫(需要設備能對外網進行訪問)
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git

注:
* 此處可能會因網絡原因造成卡頓,請耐心等待。
* 如果實在要在gitHub網頁上下載,也要把整個倉庫下載下來,不能單獨下載本實例對應的目錄。
2.2 開發環境搭建
通過adb shell進入板卡開發環境,如下圖所示。

通過以下命令,把nfs目錄掛載上nfs服務器。
mount -t nfs -o nolock : /home/orin-nano/Desktop/nfs/

2.3 例程編譯
然后定位到nfs的掛載目錄,再在目錄中創建存放源碼倉庫的管理目錄:
cd /home/orin-nano/Desktop/nfs/GitHub
進入到對應的例程目錄執行編譯操作,具體命令如下所示:
cd EASY-EAI-Toolkit-3576/Demos/common-base64/ ./build.sh

2.4 例程運行及效果
執行下方命令,運行示例程序:
./Release/test-base64
執行效果如下所示。

API的詳細說明,以及API的調用(本例程源碼),詳細信息見下方說明。
3. BASE64編解碼API說明
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-3576/easyeai-api/common/base64/。用戶可通過源代碼了解接口實現,甚至可對源碼進行修改。
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 |
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:待解碼數據 | |
| 返回值 | 編碼后所得數據的長度 |
| 注意事項 | 無 |
4. BASE64操作API案例
示例代碼路徑為EASY-EAI-Toolkit-3576/Demos/common-base64/test-base64.c。
示例一,對字符串進行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 : %sn", base64_data);
base64_decode(src_string, sizeof(src_string), base64_data);
printf("source string : %sn", src_string)
示例二,驗證數據中有0x00,還原出來的數據不會在0x00處斷開。
char num_data[8] = {0x67, 0x88, 0x70, '', '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 : %sn", 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%02x 0x%02x 0x%02xn",
decode_data[0], decode_data[1], decode_data[2], decode_data[3],
decode_data[4], decode_data[5], decode_data[6], decode_data[7]);
審核編輯 黃宇
-
編解碼
+關注
關注
1文章
151瀏覽量
20563 -
Base64
+關注
關注
0文章
26瀏覽量
9261 -
rk3576
+關注
關注
1文章
267瀏覽量
1552
發布評論請先 登錄
12 路低延遲推流!米爾 RK3576 賦能智能安防 360° 環視
【作品合集】米爾RK3576開發板測評
【作品合集】靈眸科技EASY EAI Orin Nano(RK3576)開發板測評
瑞芯微RK3576平臺FFmpeg硬件編解碼移植及性能測試實戰攻略 觸覺智能RK3576開發板演示
RK3576助力智慧安防:8路高清采集與AI識別
瑞芯微RK3576與RK3576S有什么區別,性能參數配置與型號差異解析
告別“人工盯屏”時代丨基于RK3576開發板的電梯AI智能監控方案
基于RK3576的BASE64編解碼
評論