nlib
nn::nlib::Base64Encoder クラスfinal

Base64のエンコードを行います。Base64の各種変形版をサポートします。 [詳解]

#include "nn/nlib/Base64.h"

公開型

enum  CharOption {
  BASE64_PLUS_SLASH = 0,
  BASE64_PLUS_MINUS,
  BASE64_MINUS_UNDERSCORE,
  BASE64_DOT_MINUS,
  BASE64_UNDERSCORE_COLON,
  BASE64_UNDERSCORE_MINUS,
  BASE64_DOT_UNDERSCORE,
  BASE64_EXCLAMATION_MINUS ,
  BASE64_DEFAULT = BASE64_PLUS_SLASH,
  BASE64_URL_SAFE = BASE64_MINUS_UNDERSCORE
}
 Base64の62番目と63番目の文字のバリエーションを指定できます。 [詳解]
 

公開メンバ関数

 Base64Encoder () noexcept
 デフォルトコンストラクタです。 [詳解]
 
 ~Base64Encoder () noexcept
 デストラクタです。
 
errno_t Init (CharOption char_option=BASE64_DEFAULT) noexcept
 62番目、63番目の文字を指定してオブジェクトを初期化します。 [詳解]
 
errno_t StepEncode (size_t *written, char *dst, size_t dstsize, const void *src, size_t srcsize) noexcept
 Base64の分割エンコードを行います。末尾にヌル文字は追加されません。 [詳解]
 
template<size_t N>
errno_t StepEncode (size_t *written, char(&dst)[N], const void *src, size_t srcsize) noexcept
 StepEncode(written, dst, N, src, srcsize)を実行します。
 
errno_t Close (size_t *written, char *dst, size_t dstsize, bool padding) noexcept
 Base64の分割エンコードを終了します。末端にヌル文字は追加されません。 [詳解]
 
template<size_t N>
errno_t Close (size_t *written, char(&dst)[N], bool padding) noexcept
 Base64Encoder::Close(written, dst, N, padding)を実行します。
 
 operator bool () const
 初期化済みでエラーが発生していなければtrueを返します。
 

静的公開メンバ関数

static size_t GetRequiredSize (size_t srcsize) noexcept
 データのエンコードに必要な領域のサイズを計算します。 [詳解]
 
static errno_t Encode (char *dst, size_t dstsize, const void *src, size_t srcsize, CharOption char_option=BASE64_DEFAULT, bool padding=false) noexcept
 データを一括してエンコードします。 [詳解]
 
template<size_t N>
static errno_t Encode (char(&dst)[N], const void *src, size_t srcsize, CharOption char_option=BASE64_DEFAULT, bool padding=false) noexcept
 Encode(dst, N, src, srcsize, char_option, padding)を実行します。
 
static errno_t Encode (UniquePtr< char[]> &dst, const void *src, size_t srcsize, CharOption char_option=BASE64_DEFAULT, bool padding=false) noexcept
 データを一括してエンコードします。 [詳解]
 

詳解

Base64のエンコードを行います。Base64の各種変形版をサポートします。

説明
このクラスはBase64の一括エンコード及び分割エンコードをサポートします。 Base64の各種変形版はCharOption型の値を指定することで利用可能です。 パディング出力の有無を指定することも可能です。 ただし、改行を出力することはありません。
一括エンコードは以下のようなコードで利用可能です。
UniquePtr<char[]> dst;
errno_t e = Base64Encoder::Encode(dst, src, srcsize);
if (nlib_is_error(e)) { ERROR; }
分割エンコードを行う場合は以下のようなコードになります。 作成された文字列はヌル終端しないので注意が必要です。
Base64Encoder encoder;
....
errno_t MyStepEncode(char** dst, size_t* dstsize, uint8_t* src, size_t srcsize) {
size_t written;
errno_t e = encoder.StepEncode(&written, *dst, *dstsize, src, srcsize)
if (nlib_is_error(e)) { ERROR; }
*dst += written;
*dstsize -= written;
return 0;
}
errno_t MyCloseEncode(char** dst, size_t* dstsize) {
errno_t e = encoder.Close(&written, *dst, *dstsize, false);
if (nlib_is_error(e)) { ERROR; }
*dst += written;
*dstsize -= written;
// not null terminated yet
if (dstsize == 0) { ERROR; }
*dst = '\0';
return 0;
}
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_2.png
参照
https://www.ietf.org/rfc/rfc2045.txt

Base64.h10 行目に定義があります。

列挙型メンバ詳解

§ CharOption

Base64の62番目と63番目の文字のバリエーションを指定できます。

列挙値
BASE64_PLUS_SLASH 

62番目の文字に'+'、63番目の文字に'/'を指定します。

BASE64_PLUS_MINUS 

62番目の文字に'+'、63番目の文字に'-'を指定します。

BASE64_MINUS_UNDERSCORE 

62番目の文字に'-'、63番目の文字に'_'を指定します。

BASE64_DOT_MINUS 

62番目の文字に'.'、63番目の文字に'-'を指定します。

BASE64_UNDERSCORE_COLON 

62番目の文字に'_'、63番目の文字に':'を指定します。

BASE64_UNDERSCORE_MINUS 

62番目の文字に'_'、63番目の文字に'-'を指定します。

BASE64_DOT_UNDERSCORE 

62番目の文字に'.'、63番目の文字に'_'を指定します。

BASE64_EXCLAMATION_MINUS 

62番目の文字に'!'、63番目の文字に'-'を指定します。

BASE64_DEFAULT 

BASE64_PLUS_SLASHと同じです。

BASE64_URL_SAFE 

BASE64_MINUS_UNDERSCOREと同じです。

Base64.h12 行目に定義があります。

構築子と解体子

§ Base64Encoder()

nn::nlib::Base64Encoder::Base64Encoder ( )
inlinenoexcept

デフォルトコンストラクタです。

62番目、63番目の文字を指定してクラスを構築します。

Base64.h64 行目に定義があります。

関数詳解

§ Close()

nn::nlib::Base64Encoder::Close ( size_t *  written,
char *  dst,
size_t  dstsize,
bool  padding 
)
noexcept

Base64の分割エンコードを終了します。末端にヌル文字は追加されません。

引数
[out]writtendstに書き込まれたバイト数
[out]dstエンコードが格納されるバッファ
[in]dstsizedstのサイズ
[in]paddingtrueの場合、最後にパディング文字'='を0-2個出力します。
戻り値
0成功した場合
EINVALwritten, dstNULLだった場合
EINVAL以前に何らかのエラーが発生している場合
ERANGEdstsizeが必要なサイズより小さかった場合
説明
dstは4バイト以上の領域が必要です。

§ Encode() [1/2]

nn::nlib::Base64Encoder::Encode ( char *  dst,
size_t  dstsize,
const void *  src,
size_t  srcsize,
CharOption  char_option = BASE64_DEFAULT,
bool  padding = false 
)
staticnoexcept

データを一括してエンコードします。

引数
[out]dstエンコードされた文字列が出力されるバッファ
[in]dstsizedstのサイズ
[in]srcエンコードされるデータ
[in]srcsizesrcのサイズ
[in]char_option62番目、63番目の文字を指定。
[in]paddingtrueの場合、最後にパディング文字'='を0-2個出力します。
戻り値
0ならば成功

§ Encode() [2/2]

nn::nlib::Base64Encoder::Encode ( UniquePtr< char[]> &  dst,
const void *  src,
size_t  srcsize,
CharOption  char_option = BASE64_DEFAULT,
bool  padding = false 
)
inlinestaticnoexcept

データを一括してエンコードします。

引数
[out]dstエンコードされた文字列
[in]srcエンコードされるデータ
[in]srcsizesrcのサイズ
[in]char_option62番目、63番目の文字を指定。
[in]paddingtrueの場合、最後にパディング文字'='を0-2個出力します。
戻り値
0成功した場合
EINVALsrcNULLだった場合
ENOMEMメモリの確保に失敗した場合

Base64.h47 行目に定義があります。

§ GetRequiredSize()

nn::nlib::Base64Encoder::GetRequiredSize ( size_t  srcsize)
inlinestaticnoexcept

データのエンコードに必要な領域のサイズを計算します。

引数
[in]srcsizeエンコードするデータのサイズ
戻り値
((srcsize + 2) / 3) * 4 + 1を返します。

Base64.h27 行目に定義があります。

§ Init()

nn::nlib::Base64Encoder::Init ( CharOption  char_option = BASE64_DEFAULT)
noexcept

62番目、63番目の文字を指定してオブジェクトを初期化します。

引数
[in]char_option62番目、63番目の文字を指定
戻り値
0成功した場合
EALREADY既に初期化済みでエラーが発生していない場合

§ StepEncode()

nn::nlib::Base64Encoder::StepEncode ( size_t *  written,
char *  dst,
size_t  dstsize,
const void *  src,
size_t  srcsize 
)
noexcept

Base64の分割エンコードを行います。末尾にヌル文字は追加されません。

引数
[out]writtendstに書き込まれたバイト数
[out]dstエンコードが格納されるバッファ
[in]dstsizedstのサイズ
[in]srcエンコードされるデータ
[in]srcsizesrcのサイズ
戻り値
0成功した場合
EINVALwritten, dst又はsrcNULLである場合
EINVAL以前に何らかのエラーが発生している場合
ERANGEdstsizeが必要なサイズより小さかった場合
説明
dstに必要なバッファ・サイズは、GetRequiredSize(srcsize)で計算することができます。

このクラス詳解は次のファイルから抽出されました: