char CodedData[5000000];
const char base64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
long base64encode(const char* FileName, char* buffer,unsigned int length)
{
unsigned char ReadData[57];
unsigned char ResData[76];
unsigned long p=0;
unsigned long len=0;
unsigned long SourceLen=0;
unsigned long CurResBufferPos=0;
int j;
unsigned char tmpchar;
FileData=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if(FileData==INVALID_HANDLE_VALUE) return 0;
do
{
memset(ReadData,0,57);
ReadFile(FileData,ReadData,57,&nReadBytes,NULL);
if (nReadBytes==0)
{
CloseHandle(FileData);
return len;
}
j=0;
SourceLen+=nReadBytes;
for(unsigned int i=0;i<nReadBytes;i+=3)
{
p=ReadData[i+2]+ReadData[i+1]*256+ReadData[i]*65536;
for(unsigned char i1=0;i1<3;i1++)
{
tmpchar=p;
tmpchar<<=2;
tmpchar>>=2;//
ResData[j+3-i1]=tmpchar;
p>>=6;
}
ResData[j]=p;
j+=4;
}
len+=j+1;
if(len<=length)
{
for(unsigned char i1=0;i1<j;i1++)
{
buffer[CurResBufferPos+i1]=base64[ResData[i1]];
}
buffer[CurResBufferPos+j]='n';
CurResBufferPos+=j+1;
}
else return 0;
}
while(nReadBytes==57);
char pad=(3-SourceLen%3)%3;
while(pad>0)
{
buffer[CurResBufferPos-1-pad]='=';
pad--;
}
CloseHandle(FileData);
return len;
}