📄 base64.cpp
字号:
// base64.cpp : 定义 DLL 应用程序的入口点。
//
#include "stdafx.h"
#include "base64.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
int Base64Index(BYTE base64Char)
{
int index=0;
for(;index<64;index++)
if (base64Char==Base64Code[index])
return index;
return -1;
}
BASE64_API void Base64Encode(LPCBYTE source,ULONG sourceLength,LPBYTE destination,ULONG& destinationLength)
{
int num = sourceLength/3;
int rest = sourceLength%3;
int destIndex = 0;
int i=0;
for (;i<num*3;i++)
{
BYTE curByte=source[i],prevByte=0;
if(i>0)prevByte=source[i-1];
if(i%3==0)
destination[destIndex] = Base64Code[(curByte>>2)];
if(i%3==1)
{
BYTE b = ((prevByte&0x3)<<4)+(curByte>>4);
destination[destIndex] = Base64Code[b];
}
if(i%3==2)
{
BYTE b = ((prevByte&0xf)<<2)+(curByte>>6);
destination[destIndex] = Base64Code[b];
destIndex++;
b = curByte&0x3f;
destination[destIndex] = Base64Code[b];
}
destIndex++;
}
if(rest==1)
{
destination[destIndex] = Base64Code[source[i]>>2];
destIndex++;
destination[destIndex] = Base64Code[(source[i]&0x3)<<4];
destIndex++;
destination[destIndex] = '=';
destIndex++;
destination[destIndex] = '=';
destIndex++;
}
if(rest==2)
{
destination[destIndex] = Base64Code[source[i]>>2];
destIndex++;
destination[destIndex] = Base64Code[((source[i]&0x3)<<4)+(source[i+1]>>4)];
destIndex++;
destination[destIndex] = Base64Code[(source[i+1]&0xf)<<2];
destIndex++;
destination[destIndex] = '=';
destIndex++;
}
destinationLength = destIndex;
}
BASE64_API BOOL Base64Decode(LPCBYTE source,ULONG sourceLength,LPBYTE destination,ULONG& destinationLength)
{
if(sourceLength<4||sourceLength%4)
return FALSE;
int eNum = 0;
int num = 0;
if(source[sourceLength-1] == '=')
eNum++;
if(source[sourceLength-2] == '=')
eNum++;
num = sourceLength/4;
if(eNum!=0)
num--;
int i = 0, destIndex = 0;
BYTE curByte = 0,nextByte = 0;
for (;i<num*4;i++)
{
if(i%4==3)
continue;
curByte = Base64Index(source[i]);
nextByte = Base64Index(source[i+1]);
if(i%4==0)
destination[destIndex] = (curByte<<2)+(nextByte>>4);
if(i%4==1)
destination[destIndex] = ((curByte&0xf)<<4)+(nextByte>>2);
if(i%4==2)
destination[destIndex] = ((curByte&0x3)<<6)+nextByte;
destIndex++;
}
if(eNum==1)
{
curByte = Base64Index(source[i]);
nextByte = Base64Index(source[i+1]);
destination[destIndex] = (curByte<<2)+(nextByte>>4);
curByte = nextByte;
nextByte = Base64Index(source[i+2]);
destIndex++;
destination[destIndex] = ((curByte&0xf)<<4)+(nextByte>>2);
destIndex++;
destination[destIndex] = 0;
}
if(eNum==2)
{
curByte = Base64Index(source[i]);
nextByte = Base64Index(source[i+1]);
destination[destIndex] = (curByte<<2)+(nextByte>>4);
destIndex++;
destination[destIndex] = 0;
destination[destIndex+1] = 0;
}
destinationLength = destIndex;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -