Base64のデコードを行います。Base64の各種変形版をサポートします。
[詳解]
#include "nn/nlib/Base64.h"
|
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, nlib_byte_t(&dst)[N], const char *src, size_t srcsize) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
std::pair< errno_t, size_t > | StepDecode (void *dst, size_t dstsize, const char *src, size_t srcsize) noexcept |
| Base64の分割デコードを行います。エラー値とdst に書き込まれたバイト数のペアを返します。
|
|
template<size_t N> |
std::pair< errno_t, size_t > | StepDecode (nlib_byte_t(&dst)[N], const char *src, size_t srcsize) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
errno_t | Close (size_t *written, void *dst, size_t dstsize) noexcept |
| Base64の分割デコードを終了します。 [詳解]
|
|
template<size_t N> |
errno_t | Close (size_t *written, nlib_byte_t(&dst)[N]) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
std::pair< errno_t, size_t > | Close (void *dst, size_t dstsize) noexcept |
| Base64の分割デコードを終了します。エラー値とdst に書き込まれたバイト数のペアを返します。
|
|
template<size_t N> |
std::pair< errno_t, size_t > | Close (nlib_byte_t(&dst)[N]) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
| operator bool () const |
| オブジェクトが初期化済みで内部でエラーが発生していなければtrue 、発生していればfalse を返します。
|
|
|
constexpr | Base64Decoder () noexcept |
| デフォルトコンストラクタです。
|
|
errno_t | Init (CharOption char_option=kBase64Default) noexcept |
| 62番目、63番目の文字を指定してオブジェクトを初期化します。 [詳解]
|
|
|
static size_t | GetRequiredSize (size_t srcsize) noexcept |
| データのデコードに必要な領域のサイズを計算します。 [詳解]
|
|
static errno_t | Decode (size_t *written, void *dst, size_t dstsize, const char *src, CharOption char_option=kBase64Default) noexcept |
| データを一括してデコードします。 [詳解]
|
|
template<size_t N> |
static errno_t | Decode (size_t *written, nlib_byte_t(&dst)[N], const char *src, CharOption char_option=kBase64Default) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
static std::pair< errno_t, size_t > | Decode (void *dst, size_t dstsize, const char *src, CharOption char_option=kBase64Default) noexcept |
| データを一括してデコードします。エラー値と出力されたデータサイズのペアを返します。
|
|
template<size_t N> |
static std::pair< errno_t, size_t > | Decode (nlib_byte_t(&dst)[N], const char *src, CharOption char_option=kBase64Default) noexcept |
| 上記関数のテンプレートオーバーロードです。
|
|
static errno_t | Decode (UniquePtr< uint8_t[]> &dst, size_t *dstsize, const char *src, CharOption char_option=kBase64Default) noexcept |
| データを一括してデコードします。 [詳解]
|
|
static std::tuple< errno_t, std::unique_ptr< nlib_byte_t[]>, size_t > | Decode (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
型の値を指定することで利用可能です。 改行やパディングを含む入力もデコード可能です。
- 参照
- https://www.ietf.org/rfc/rfc2045.txt
- オブジェクトの状態遷移
- オブジェクトの状態遷移の概略は以下のとおりです。
Base64.h の 140 行目に定義があります。
◆ 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 の 142 行目に定義があります。
◆ 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, |
|
|
void * |
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ならば成功
- 説明
- 以下がコード例です。
const char* base64 = "RGF0YSB0byBlbmNvZGU";
SUCCEED_IF(std::get<0>(result) == 0);
auto data = std::move(std::get<1>(result));
size_t size = std::get<2>(result);
const char* p = reinterpret_cast<const char*>(data.get());
std::string str(p, p + size);
Base64.h の 158 行目に定義があります。
◆ Decode() [2/2]
データを一括してデコードします。
- 引数
-
[out] | dst | デコードされたデータ |
[out] | dstsize | dst のサイズ |
[in] | src | エンコードされた文字列 |
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | dstsize , src がNULL だった場合 |
ENOMEM | メモリの確保に失敗した場合 |
EILSEQ | 不正な文字があった場合 |
Base64.h の 184 行目に定義があります。
◆ DecodeInplace()
データをその場でデコードします。
- 引数
-
[out] | written | src に書き込まれたサイズ |
[in,out] | src | エンコードされた文字列、及びデコードされたデータ |
[in] | char_option | 62番目、63番目の文字を指定 |
- 戻り値
-
0 | 成功した場合 |
EINVAL | written , src がNULL だった場合 |
EILSEQ | 不正な文字があった場合 |
- 説明
EILSEQ
を返す場合は途中までデコードできた場合でもwritten
には0が書き込まれます。
- 以下がコード例です。
char base64[] = "RGF0YSB0byBlbmNvZGUgc3RlcDEKRGF0YSB0byBlbmNvZGUgc3RlcDIK";
size_t written;
SUCCEED_IF(e == 0);
base64[written] = '\0';
◆ GetRequiredSize()
nn::nlib::Base64Decoder::GetRequiredSize |
( |
size_t |
srcsize | ) |
|
|
inlinestaticnoexcept |
データのデコードに必要な領域のサイズを計算します。
- 引数
-
- 戻り値
((srcsize + 3) / 4) * 3;
を返します。
Base64.h の 157 行目に定義があります。
◆ Init()
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が書き込まれます。
- 以下がコード例です。
char dst[256];
char* p = &dst[0];
size_t dstsize = 256;
const char* base64[] = {
"RGF0YS", "B0byBlbmNvZ", "GU", "gc3RlcDEKRGF0YSB", "0byBlbm", "NvZGUgc3RlcDIK"
};
for (auto& str : base64) {
SUCCEED_IF(result.first == 0);
p += result.second;
dstsize -= result.second;
}
auto result = decoder.
Close(p, dstsize);
SUCCEED_IF(result.first == 0);
p += result.second;
dstsize -= result.second;
SUCCEED_IF(dstsize > 0);
*p = '\0';
このクラス詳解は次のファイルから抽出されました: