Base64のデコードを行います。Base64の各種変形版をサポートします。
[詳解]
#include "nn/nlib/Base64.h"
|
| Base64Decoder () noexcept |
| デフォルトコンストラクタです。
|
|
| ~Base64Decoder () noexcept |
| デストラクタです。
|
|
errno_t | Init (CharOption char_option=kBase64Default) noexcept |
| 62番目、63番目の文字を指定してオブジェクトを初期化します。 [詳解]
|
|
errno_t | StepDecode (size_t *written, void *dst, size_t dstsize, const char *src, size_t srcsize) noexcept |
| Base64の分割デコードを行います。 [詳解]
|
|
template<size_t N> |
errno_t | StepDecode (size_t *written, uint8_t(&dst)[N], const char *src, size_t srcsize) noexcept |
| StepDecode(written, dst, N, src, srcsize) を実行します。
|
|
errno_t | Close (size_t *written, void *dst, size_t dstsize) noexcept |
| Base64の分割デコードを終了します。 [詳解]
|
|
| operator bool () const |
| 初期化済みでエラーが発生していなければtrue を返します。
|
|
|
static size_t | GetRequiredSize (size_t srcsize) noexcept |
| データのデコードに必要な領域のサイズを計算します。 [詳解]
|
|
static errno_t | Decode (size_t *written, uint8_t *dst, size_t dstsize, const char *src, CharOption char_option=kBase64Default) noexcept |
| データを一括してデコードします。 [詳解]
|
|
template<size_t N> |
static errno_t | Decode (size_t *written, uint8_t(&dst)[N], const char *src, CharOption char_option=kBase64Default) noexcept |
| Decode(written, dst, N, src, srcsize, char_option) を実行します。
|
|
static errno_t | Decode (UniquePtr< uint8_t[]> &dst, size_t *dstsize, const char *src, CharOption char_option=kBase64Default) noexcept |
| データを一括してデコードします。 [詳解]
|
|
static errno_t | DecodeInplace (size_t *written, char *src, CharOption char_option=kBase64Default) noexcept |
| データをその場でデコードします。 [詳解]
|
|
Base64のデコードを行います。Base64の各種変形版をサポートします。
- 説明
- このクラスはBase64の一括デコード、分割デコード、インプレイスの一括デコードをサポートします。 Base64の各種変形版は
CharOption
型の値を指定することで利用可能です。 改行やパディングを含む入力もデコード可能です。
- 一括デコードは以下のようなコードで利用可能です。
UniquePtr<uint8_t[]> dst;
size_t dstsize;
分割デコードを行う場合は以下のようなコードになります。 ....
errno_t MyStepDecode(uint8_t** dst,
size_t* dstsize,
const char* src,
size_t srcsize) {
size_t written;
errno_t e = decoder.StepDecode(&written, *dst, *dstsize, src, srcsize);
*dst += written;
*dstsize -= written;
return 0;
}
errno_t MyCloseDecode(
char** dst,
size_t* dstsize) {
size_t written;
errno_t e = decoder.Close(&written, *dst, *dstsize);
*dst += written;
*dstsize -= written;
return 0;
}
- 参照
- https://www.ietf.org/rfc/rfc2045.txt
- オブジェクトの状態遷移
- オブジェクトの状態遷移の概略は以下のとおりです。
Base64.h の 130 行目に定義があります。
◆ Close()
nn::nlib::Base64Decoder::Close |
( |
size_t * |
written, |
|
|
void * |
dst, |
|
|
size_t |
dstsize |
|
) |
| |
|
noexcept |
Base64の分割デコードを終了します。
- 引数
-
[out] | written | dst に書き込まれたバイト数 |
[out] | dst | デコードが格納されるバッファ |
[in] | dstsize | dst のサイズ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | written , dst がNULL だった場合 |
EINVAL | 以前に何らかのエラーが発生している場合 |
ERANGE | dstsize が必要なサイズより小さかった場合 |
- 説明
dst
は2バイト以上の領域が必要です。
◆ Decode() [1/2]
nn::nlib::Base64Decoder::Decode |
( |
size_t * |
written, |
|
|
uint8_t * |
dst, |
|
|
size_t |
dstsize, |
|
|
const char * |
src, |
|
|
CharOption |
char_option = kBase64Default |
|
) |
| |
|
inlinestaticnoexcept |
データを一括してデコードします。
- 引数
-
[out] | written | dst に出力されたデータサイズ |
[out] | dst | デコードされたデータが出力されるバッファ |
[in] | dstsize | dst のサイズ |
[in] | src | エンコードされた文字列 |
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
- 0ならば成功
Base64.h の 161 行目に定義があります。
◆ Decode() [2/2]
nn::nlib::Base64Decoder::Decode |
( |
UniquePtr< uint8_t[]> & |
dst, |
|
|
size_t * |
dstsize, |
|
|
const char * |
src, |
|
|
CharOption |
char_option = kBase64Default |
|
) |
| |
|
inlinestaticnoexcept |
データを一括してデコードします。
- 引数
-
[out] | dst | デコードされたデータ |
[out] | dstsize | dst のサイズ |
[in] | src | エンコードされた文字列 |
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | dstsize , src がNULL だった場合 |
ENOMEM | メモリの確保に失敗した場合 |
EILSEQ | 不正な文字があった場合 |
Base64.h の 178 行目に定義があります。
◆ DecodeInplace()
nn::nlib::Base64Decoder::DecodeInplace |
( |
size_t * |
written, |
|
|
char * |
src, |
|
|
CharOption |
char_option = kBase64Default |
|
) |
| |
|
staticnoexcept |
データをその場でデコードします。
- 引数
-
[out] | written | src に書き込まれたサイズ |
[in,out] | src | エンコードされた文字列、及びデコードされたデータ |
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | written , src がNULL だった場合 |
EILSEQ | 不正な文字があった場合 |
- 説明
EILSEQ
を返す場合は途中までデコードできた場合でもwritten
には0が書き込まれます。
◆ GetRequiredSize()
nn::nlib::Base64Decoder::GetRequiredSize |
( |
size_t |
srcsize | ) |
|
|
inlinestaticnoexcept |
データのデコードに必要な領域のサイズを計算します。
- 引数
-
- 戻り値
((srcsize + 3) / 4) * 3;
を返します。
Base64.h の 158 行目に定義があります。
◆ Init()
nn::nlib::Base64Decoder::Init |
( |
CharOption |
char_option = kBase64Default | ) |
|
|
noexcept |
62番目、63番目の文字を指定してオブジェクトを初期化します。
- 引数
-
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
-
0 | 成功した場合 |
EALREADY | 既に初期化済みでエラーが発生していない場合 |
◆ StepDecode()
nn::nlib::Base64Decoder::StepDecode |
( |
size_t * |
written, |
|
|
void * |
dst, |
|
|
size_t |
dstsize, |
|
|
const char * |
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 が必要なサイズより小さかった場合 |
EILSEQ | 不正な文字があった場合 |
- 説明
dst
に必要なバッファ・サイズは、GetRequiredSize(srcsize)
で計算することができます。 EILSEQ
を返す場合は途中までデコードできた場合でもwritten
には0が書き込まれます。
このクラス詳解は次のファイルから抽出されました: