12 #include "../GrayLibBase.h"
30 return (
StrLen_t)(((nSizeBin + 2) / 3) * 4);
36 return ((nLenText * 3) / 4);
48 static const char k_chFill =
'=';
49 static const char k_Encode[65];
51 static inline char ENC(BYTE b)
56 static inline BYTE
DEC(
char ch) noexcept
59 if (ch >=
'A' && ch <=
'Z')
61 if (ch >=
'a' && ch <=
'z')
62 return (ch -
'a') + 26;
63 if (ch >=
'0' && ch <=
'9')
64 return (ch -
'0') + 52;
83 static const char k_chFill = (char)(
' ' + 64);
85 static inline char ENC(BYTE b)
90 static inline BYTE
DEC(
char ch) noexcept
98 template <
class _TYPE_CH = cUUCodeChar >
106 typedef _TYPE_CH SUPER_t;
112 return SUPER_t::DEC(ch) < 64 ;
115 static inline void EncodeBlock(
char* pDstText,
const BYTE* pSrcBin)
120 BYTE s0 = pSrcBin[0];
121 BYTE s1 = pSrcBin[1];
122 BYTE s2 = pSrcBin[2];
125 pDstText[0] = SUPER_t::ENC(n);
126 n = ((s0 << 4) & 0x30) | ((s1 >> 4) & 0x0f);
127 pDstText[1] = SUPER_t::ENC(n);
128 n = ((s1 << 2) & 0x3c) | ((s2 >> 6) & 0x03);
129 pDstText[2] = SUPER_t::ENC(n);
131 pDstText[3] = SUPER_t::ENC(n);
135 static inline void DecodeBlock(BYTE* pDstBin,
const char* pSrcText) noexcept
144 BYTE a = SUPER_t::DEC(pSrcText[0]);
145 BYTE b = SUPER_t::DEC(pSrcText[1]);
146 pDstBin[0] = (a << 2) | (b >> 4);
147 BYTE c = SUPER_t::DEC(pSrcText[2]);
148 pDstBin[1] = (b << 4) | (c >> 2);
149 BYTE d = SUPER_t::DEC(pSrcText[3]);
150 pDstBin[2] = (c << 6) | d;
153 static inline void EncodeBlockEnd(
char* pDst,
const BYTE* pSrc,
size_t nSizeLeft)
168 static size_t GRAYCALL Decode(BYTE* pDstBin,
size_t nSizeDst,
const char* pSrcText,
StrLen_t nLenSrc = -1);
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cBase64.h:100
static bool IsValidChar(char ch) noexcept
Definition: cBase64.h:108
static void EncodeBlockEnd(char *pDst, const BYTE *pSrc, size_t nSizeLeft)
Definition: cBase64.h:153
static size_t GRAYCALL Decode(BYTE *pDstBin, size_t nSizeDst, const char *pSrcText, StrLen_t nLenSrc=-1)
Decode an encoded text string to a binary blob. in place is OK.
Definition: cBase64.cpp:54
static StrLen_t GRAYCALL Encode(char *pDstText, StrLen_t nLenDstMax, const BYTE *pSrcBin, size_t nSizeSrc)
Encode a binary blob to text string.
Definition: cBase64.cpp:15
static void DecodeBlock(BYTE *pDstBin, const char *pSrcText) noexcept
Definition: cBase64.h:135
static void EncodeBlock(char *pDstText, const BYTE *pSrcBin)
Definition: cBase64.h:115
cBase64CoderT< cBase64Char > cBase64
Definition: cBase64.h:171
cBase64CoderT< cUUCodeChar > cUUCode
Definition: cBase64.h:172
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
static BYTE DEC(char ch) noexcept
Definition: cBase64.h:56
static char ENC(BYTE b)
Definition: cBase64.h:51
static StrLen_t GetTextSizeFromBinarySize(size_t nSizeBin) noexcept
Definition: cBase64.h:25
static size_t GetBinarySizeFromTextSize(StrLen_t nLenText) noexcept
Definition: cBase64.h:32
static BYTE DEC(char ch) noexcept
Definition: cBase64.h:90
static char ENC(BYTE b)
Definition: cBase64.h:85
static void Copy(void *pDst, const void *pSrc, size_t nSizeBlock) noexcept
Definition: cMem.h:132
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100
static void FillSize(void *pArray, size_t nArraySizeBytes, TYPE nFillValue) noexcept
Definition: cValT.h:132