📄 base64编码.c
字号:
#include <stdio.h>
#include <conio.h>
#include <mem.h>
#include <malloc.h>
char* EncodeBase64(const char* pVal ,int len)
{
static const char*index= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const char* p = pVal;
//char*const pRet = new char[len*4/3+16];
char*const pRet = (char*)malloc(len*4/3+16);
memset( pRet , 0 , len*4/3+16 );
char* pOut=pRet;
while( len >=3 ){
pOut[0] = index[(p[0]>>2)&0x3f];
pOut[1] = index[(((p[0]<<6)>>2)| (p[1]>>4))&0x3f];
pOut[2] = index[((p[1]<<4>>2) | (p[2]>>6))&0x3f];
pOut[3] = index[(p[2]<<2>>2)&0x3f];
len-=3;
p+=3;
pOut+=4;
pOut[0]=0;
}
if( 2==len){
pOut[0] = index[(p[0]>>2)&0x3f];
pOut[1] = index[(((p[0]<<6)>>2)| (p[1]>>4))&0x3f];
pOut[2] = index[(p[1]<<4>>2)&0x3f];
pOut[3] = '=';
pOut[4]=0;
}else if( 1==len){
pOut[0] = index[(p[0]>>2)&0x3f];
pOut[1] = index[((p[0]<<6)>>2)&0x3f];
pOut[2] = '=';
pOut[3] = '=';
pOut[4]=0;
}
return pRet;
}
int DecodeBase64(const char* p,char* pOut)
{
int len =0;
size_t i;
static const char index[]={62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,
0,0,0,64,0,0,0,0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
0,0,0,0,0,0,26,27,28,29,30,31,32,33,
34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51};
size_t l = strlen( p );
for(i=0; i<l-4;i+=4){
pOut[0] = index[ p[0]-0x2b ]<<2|index[ p[1]-0x2b ]<<2>>6;
pOut[1] = index[ p[1]-0x2b ]<<4|index[ p[2]-0x2b ]<<2>>4;
pOut[2] = index[ p[2]-0x2b ]<<6|index[ p[3]-0x2b ]<<2>>2;
pOut+=3;
len+=3;
p+=4;
}
if( '=' == p[2] ){
pOut[0] = index[ p[0]-0x2b ]<<2|index[ p[1]-0x2b ]<<2>>6;
pOut[1]=0;
len++;
}else if( '=' == p[3] ){
pOut[0] = index[ p[0]-0x2b ]<<2|index[ p[1]-0x2b ]<<2>>6;
pOut[1] = index[ p[1]-0x2b ]<<4|index[ p[2]-0x2b ]<<2>>4;
pOut[2]=0;
len+=2;
}else{
pOut[0] = index[ p[0]-0x2b ]<<2|index[ p[1]-0x2b ]<<2>>6;
pOut[1] = index[ p[1]-0x2b ]<<4|index[ p[2]-0x2b ]<<2>>4;
pOut[2] = index[ p[2]-0x2b ]<<6|index[ p[3]-0x2b ]<<2>>2;
pOut[3]=0;
len+=3;
}
return len;
}
int main()
{
char* src = "1234ABCD";
char* p = (char*)malloc(strlen(src)*2);
char* decodeB = (char*)malloc(strlen(src));
p = EncodeBase64(src,strlen(src));
printf("%s\n",p);
DecodeBase64(p,decodeB);
printf("%s\n",decodeB);
getch();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -