Base64のエンコードを行います。Base64の各種変形版をサポートします。
[詳解]
#include "nn/nlib/Base64.h"
|
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
型の値を指定することで利用可能です。 パディング出力の有無を指定することも可能です。 ただし、改行を出力することはありません。
- 一括エンコードは以下のようなコードで利用可能です。
- 分割エンコードを行う場合は以下のようなコードになります。 作成された文字列はヌル終端しないので注意が必要です。
....
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)
*dst += written;
*dstsize -= written;
return 0;
}
errno_t MyCloseEncode(
char** dst,
size_t* dstsize) {
errno_t e = encoder.Close(&written, *dst, *dstsize,
false);
*dst += written;
*dstsize -= written;
if (dstsize == 0) { ERROR; }
*dst = '\0';
return 0;
}
- オブジェクトの状態遷移
- オブジェクトの状態遷移の概略は以下のとおりです。
- 参照
- https://www.ietf.org/rfc/rfc2045.txt
Base64.h の 27 行目に定義があります。
◆ 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.h の 29 行目に定義があります。
◆ Close()
nn::nlib::Base64Encoder::Close |
( |
size_t * |
written, |
|
|
char * |
dst, |
|
|
size_t |
dstsize, |
|
|
bool |
padding |
|
) |
| |
|
noexcept |
Base64の分割エンコードを終了します。末端にヌル文字は追加されません。
- 引数
-
[out] | written | dst に書き込まれたバイト数 |
[out] | dst | エンコードが格納されるバッファ |
[in] | dstsize | dst のサイズ |
[in] | padding | true の場合、最後にパディング文字'='を0-2個出力します。 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | written , dst がNULL だった場合 |
EINVAL | 以前に何らかのエラーが発生している場合 |
ERANGE | dstsize が必要なサイズより小さかった場合 |
- 説明
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] | dstsize | dst のサイズ |
[in] | src | エンコードされるデータ |
[in] | srcsize | src のサイズ |
[in] | char_option | 62番目、63番目の文字を指定。 |
[in] | padding | true の場合、最後にパディング文字'='を0-2個出力します。 |
- 戻り値
- 0ならば成功
◆ Encode() [2/2]
データを一括してエンコードします。
- 引数
-
[out] | dst | エンコードされた文字列 |
[in] | src | エンコードされるデータ |
[in] | srcsize | src のサイズ |
[in] | char_option | 62番目、63番目の文字を指定。 |
[in] | padding | true の場合、最後にパディング文字'='を0-2個出力します。 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | src がNULL だった場合 |
ENOMEM | メモリの確保に失敗した場合 |
Base64.h の 71 行目に定義があります。
◆ GetRequiredSize()
nn::nlib::Base64Encoder::GetRequiredSize |
( |
size_t |
srcsize | ) |
|
|
inlinestaticnoexcept |
データのエンコードに必要な領域のサイズを計算します。
- 引数
-
[in] | srcsize | エンコードするデータのサイズ |
- 戻り値
((srcsize + 2) / 3) * 4 + 1
を返します。
Base64.h の 55 行目に定義があります。
◆ Init()
62番目、63番目の文字を指定してオブジェクトを初期化します。
- 引数
-
[in] | char_option | 62番目、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] | written | dst に書き込まれたバイト数 |
[out] | dst | エンコードが格納されるバッファ |
[in] | dstsize | dst のサイズ |
[in] | src | エンコードされるデータ |
[in] | srcsize | src のサイズ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | written , dst 又はsrc がNULL である場合 |
EINVAL | 以前に何らかのエラーが発生している場合 |
ERANGE | dstsize が必要なサイズより小さかった場合 |
- 説明
dst
に必要なバッファ・サイズは、GetRequiredSize(srcsize)
で計算することができます。
このクラス詳解は次のファイルから抽出されました: