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-Toolkit- ダウンロードリンク: 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]);