17#pragma comment(user,"T-Coverage Disable")
52 const TYP* m_lpszResult;
61 virtual int m_Base64ToInt(TYP c) = 0;
69 virtual TYP m_IntToBase64(
int i) = 0;
75 TYP m_PaddingCode(
void)
83 const TYP* m_SkipSpace(
const TYP* P)
85 while ( *P ==
' ' || *P ==
'\r' || *P ==
'\n' || *P ==
'\t' )
111 const TYP* P = m_SkipSpace(lpszBase64);
118 if ( 0 <= m_Base64ToInt(*P) )
124 int r1 = m_Base64ToInt(*P);
129 P = m_SkipSpace(P + 1);
130 int r2 = m_Base64ToInt(*P);
131 P = m_SkipSpace(P + 1);
132 int r3 = m_Base64ToInt(*P);
133 P = m_SkipSpace(P + 1);
134 int r4 = m_Base64ToInt(*P);
135 P = m_SkipSpace(P + 1);
136 if ( r1 >= 0x100 || r2 >= 0x100 || r2 < 0 || r3 < 0 || r4 < 0 )
141 vb.
Add(
static_cast<BYTE
>(((r1<<2)&0xFC) | ((r2>>4)&0x03)));
144 vb.
Add(
static_cast<BYTE
>(((r2<<4)&0xF0) | ((r3>>2)&0x0F)));
147 vb.
Add(
static_cast<BYTE
>(((r3<<6)&0xC0) | ((r4)&0x3F)));
151 if ( r3 >= 0x0100 || r4 >= 0x0100 )
200 const BYTE* B =
static_cast<const BYTE*
>(P);
207 strRc += m_IntToBase64(r);
208 r = ((B[0]<<4)&0x30);
209 strRc += m_IntToBase64(r);
210 strRc += m_PaddingCode();
211 strRc += m_PaddingCode();
214 else if ( size == 2 )
217 strRc += m_IntToBase64(r);
218 r = ((B[0]<<4)&0x30) | ((B[1]>>4)&0x0F);
219 strRc += m_IntToBase64(r);
220 r = ((B[1]<<2)&0x3C);
221 strRc += m_IntToBase64(r);
222 strRc += m_PaddingCode();
226 strRc += m_IntToBase64(r);
227 r = ((B[0]<<4)&0x30) | ((B[1]>>4)&0x0F);
228 strRc += m_IntToBase64(r);
229 r = ((B[1]<<2)&0x3C) | ((B[2]>>6)&0x03);
230 strRc += m_IntToBase64(r);
232 strRc += m_IntToBase64(r);
284 virtual int m_Base64ToInt(
char c)
287 if (
'A' <= c && c <=
'Z' )
291 else if (
'a' <= c && c <=
'z' )
295 else if (
'0' <= c && c <=
'9' )
311 ASSERTLIB(r < 0 || m_IntToBase64(r) == c);
321 virtual char m_IntToBase64(
int i)
323 const char* acAlpha =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
329 else if ( i >= 0 && i < 64 )
356 const WCHAR* m_list(
void)
374 virtual int m_Base64ToInt(WCHAR c)
376 const WCHAR* aa = m_list();
385 return static_cast<int>(i);
397 virtual WCHAR m_IntToBase64(
int i)
399 const WCHAR* aa = m_list();
405 else if ( i >= 0 && i < 64 )
423 CUnicode s = _super::Encode(size, P);
460#pragma comment(user,"T-Coverage Enable")
#define loop(VAR, CNT)
loop構文.
virtual CStrT< TYP > Encode(size_t size, LPCVOID P)
[変換] エンコード
CVectorT< BYTE > Decode(const TYP *lpszBase64)
[変換] デコード
CStrT< TYP > Encode(LPCSTR lpsz)
[変換] エンコード
CAbstractBase64T(void)
コンストラクタ
CStrT< TYP > Encode(const ISequenceCollectionT< BYTE > &c)
[変換] エンコード
CAscii DecodeForStr(const TYP *lpszBase64)
[変換] デコード
const TYP * GetDecodeEndPtr(void) const
[取得] デコード終了アドレス
bool IsEmpty(void) const
[確認] 空チェック
CStrT Left(size_t iSize) const
[作成] 範囲取得.
CStrT Mid(INDEX iOffset, size_t iSize=INVALID_SIZE) const
[作成] 範囲取得.
void Invalid(void)
[操作] 無効状態にする
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
bool IsEmpty(void) const
[確認] 要素の有無確認.
virtual const TYP * ReferBuffer(void) const =0
[取得] データアドレス取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.