网上找了数份,总是不对,把delphi的代码抠出来改了下,终于对了,网上记一下,以备翻查
const char CEnBase64Tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const char CFillChar = '=';
struct DWORDBytes
{
union
{
struct
{
unsigned char Byte1, Byte2, Byte3, Byte4;
};
unsigned int Whole;
unsigned char CharArray[4];
};
};
void EncodeUnit(const unsigned char AIn1, const unsigned char AIn2,
const unsigned char AIn3, DWORDBytes& VOut)
{
DWORDBytes LUnit;
LUnit.Byte1 = CEnBase64Tab[((AIn1 >> 2) & 63)];
LUnit.Byte2 = CEnBase64Tab[(((AIn1 << 4) | (AIn2 >> 4)) & 63)];
LUnit.Byte3 = CEnBase64Tab[(((AIn2 << 2) | (AIn3 >> 6)) & 63)];
LUnit.Byte4 = CEnBase64Tab[(AIn3 & 63)];
VOut = LUnit;
}
int EncodeBase64(const unsigned char* LBuffer, char* pDst, int LBufSize)
{
int LPos = 0;
int LSize;