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

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

#include "nn/nlib/Base64.h"

公開型

enum  CharOption {
  kBase64PlusSlash = 0,
  kBase64PlusMinus,
  kBase64MinusUnderscore,
  kBase64DotMinus,
  kBase64UnderscoreColon,
  kBase64UnderscoreMinus,
  kBase64DotUnderscore,
  kBase64ExclamationMinus ,
  kBase64Default = kBase64PlusSlash,
  kBase64UrlSafe = kBase64MinusUnderscore
}
 Base64の62番目と63番目の文字のバリエーションを指定できます。 [詳解]
 

公開メンバ関数

constexpr Base64Encoder () noexcept
 デフォルトコンストラクタです。
 
errno_t Init (CharOption char_option=kBase64Default) 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=kBase64Default, bool padding=false) noexcept
 データを一括してエンコードします。 [詳解]
 
template<size_t N>
static errno_t Encode (char(&dst)[N], const void *src, size_t srcsize, CharOption char_option=kBase64Default, 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=kBase64Default, 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.h27 行目に定義があります。

列挙型メンバ詳解

◆ CharOption

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

列挙値
kBase64PlusSlash 

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

kBase64PlusMinus 

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

kBase64MinusUnderscore 

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

kBase64DotMinus 

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

kBase64UnderscoreColon 

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

kBase64UnderscoreMinus 

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

kBase64DotUnderscore 

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

kBase64ExclamationMinus 

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

kBase64Default 

kBase64PlusSlashと同じです。

kBase64UrlSafe 

kBase64MinusUnderscoreと同じです。

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

関数詳解

◆ 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 = kBase64Default,
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 = kBase64Default,
bool  padding = false 
)
inlinestaticnoexcept

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

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

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

◆ GetRequiredSize()

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

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

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

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

◆ Init()

nn::nlib::Base64Encoder::Init ( CharOption  char_option = kBase64Default)
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)で計算することができます。

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