/**cbase64中的解码函数有误,网上找一个
@param base64code 待解码
@param base64length 长度
@return 解码后
@author 张浩
*/
BYTE* Base64Decode(const char* base64code, DWORD base64length)
{
char buf[4];
int i, j;
int k;
int l = 0;
BYTE temp1[4], temp2;
BYTE* Buffer = new BYTE[base64length*3 / 4];
DWORD base64a = (base64length / 4) - 1;
DWORD base64b = 0;
for (; base64b < base64a + 1; base64b++)
{
for (i = 0; i < 4; i++)
{
buf[i] = *(base64code + (base64b * 4) + i);
for (j = 0; j < 65; j++)
{
if (buf[i] == base64_alphabet[j])
{
temp1[i] = j;
break;
}
}
}
i--;
for (k = 1; k < 4; k++)
{
if (temp1[i - (k - 1)] == 64)
{
/*m_padnum++;*/ continue;
}
temp1[i - (k - 1)] = temp1[i - (k - 1)] /
LMoveBit(2, (k - 1) * 2);
temp2 = temp1[i - k];
temp2 = temp2 & (LMoveBit(2, k * 2) - 1);
temp2 *= LMoveBit(2, 8 - (2 * k));//move 4
temp1[i - (k - 1)] = temp1[i - (k - 1)] + temp2;
Buffer[base64b * 3 + (3 - k)] = temp1[i - (k - 1)];
}
}
return Buffer;
}