# Include <afx. h>
# Include <stdio. h>
Unsigned char * base64 = (unsigned char *) "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 +/= ";
// Encoding
Cstring base64encode (cstring SRC, int srclen)
{
Int N, buflen, I, j;
Cstring Buf = SRC;
Static unsigned char * DST;
Buflen = n = srclen;
DST = (unsigned char *) malloc (buflen/3*4 + 3 );
Memset (DST, 0, buflen/3*4 + 3 );
For (I = 0, j = 0; I <= buflen-3; I + = 3, J + = 4)
{
DST [J] = (BUF [I] & 0xfc)> 2;
DST [J + 1] = (BUF [I] & 0x03) <4) + (BUF [I + 1] & 0xf0)> 4 );
DST [J + 2] = (BUF [I + 1] & 0x0f) <2) + (BUF [I + 2] & 0xc0)> 6 );
DST [J + 3] = Buf [I + 2] & 0x3f;
}
If (N % 3 = 1)
{
DST [J] = (BUF [I] & 0xfc)> 2;
DST [J + 1] = (BUF [I] & 0x03) <4 );
DST [J + 2] = 64;
DST [J + 3] = 64;
J + = 4;
}
Else if (N % 3 = 2)
{
DST [J] = (BUF [I] & 0xfc)> 2;
DST [J + 1] = (BUF [I] & 0x03) <4) + (BUF [I + 1] & 0xf0)> 4 );
DST [J + 2] = (BUF [I + 1] & 0x0f) <2 );
DST [J + 3] = 64;
J + = 4;
}
For (I = 0; I <j; I ++)
{
DST [I] = base64 [(INT) DST [I];
}
DST [J] = 0;
Return cstring (DST );
}
// Decoding
Cstring base64decode (cstring inpt, int * Len)
{
Int N, I, j, pad;
Unsigned char * P;
Static unsigned char * DST;
Unsigned char * SRC;
* Len = 0;
Pad = 0;
N = inpt. getlength ();
Src = new unsigned char [N];
For (I = 0; I <n; I ++)
{
SRC [I] = inpt [I];
}
While (n> 0 & SRC [n-1] = ')
{
SRC [n-1] = 0;
Pad ++;
N --;
}
For (I = 0; I <n; I ++)
{
P = (unsigned char *) strchr (const char *) base64, (INT) SRC [I]);
If (! P)
Break;
SRC [I] = P-(unsigned char *) base64;
}
DST = (unsigned char *) malloc (N * 3/4 + 1 );
Memset (DST, 0, N * 3/4 + 1 );
For (I = 0, j = 0; I <n; I + = 4, J + = 3)
{
DST [J] = (SRC [I] <2) + (SRC [I + 1] & 0x30)> 4 );
DST [J + 1] = (SRC [I + 1] & 0x0f) <4) + (SRC [I + 2] & 0x3c)> 2 );
DST [J + 2] = (SRC [I + 2] & 0x03) <6) + SRC [I + 3];
* Len + = 3;
}
* Len-= pad;
Return cstring (DST );
}
Source code download: http://yunpan.cn/Qt4AJxziqKMTV