📄 base64.c
字号:
/*****************************************************************************************************
// 广东省科学院自动化研制中心重点实验室电子组
//
//文件名: base64.c
//版本 : V0.0
//作者 :
//日期 :2006-3-15
//
//其他 :
//www.autocenter.gd.cn
// gdpiao@autocenter.gd.cn
********************************************************************************************************/
#define _IN_BASE64_
#include "config.h"
static char Base64_table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/*********************************************************************************
// int8 Base64_decode(uint8 *src,uint8 *dst)
//参数:uint8 *src 源地址
// uint8 *dst 目标地址
//
//返回:
**********************************************************************************/
uint16 Base64_decode(uint8 *src,uint8 *dst)
{
uint16 length,i,j;
uint8 temp[4];//,DST_TEMP[3500];
char *p,*p_to_table;
p_to_table=Base64_table;
length=strlen((char *)src);//获取源字符串的长度
for(i=0;i<length;i++)//解码出源代码
{
p=strchr(Base64_table,src[i]);
if(!p)
{
src[i]=0;
break;
}
dst[i] = p - p_to_table;
//tem_pionter[i]=dst[i];
}
if((length%4)!=0) //不是4的倍数
length=length-length%4;///凑够4的倍数
//j=length/4;//程序主体要预算的次数
//**重新组合数据
for(j=0,i=0;j<length;j+=4,i+=3)
{
temp[0]=(dst[j+0]<<2)+((dst[j+1] & 0x30 )>>4);
temp[1]=((dst[j+1]& 0x0f)<<4)+((dst[j+2] & 0x3c)>>2);
temp[2]=((dst[j+2]& 0x03)<<6)+(dst[j+3] & 0x3f);
////转存到dst
dst[j+0]=0;
dst[j+1]=0;
dst[j+2]=0;
dst[j+3]=0;
///清掉数据 确保不会出现乱码
dst[i+0]=temp[0];
dst[i+1]=temp[1];
dst[i+2]=temp[2];
}
length = strlen((char *)dst);
return length;
}
//2005-12-15 14:34
/*********************************************************************************
// uint8 * Base64_encode(uint8 *src,uint8 *dst)
//参数:uint8 *src 源地址
// uint8 *dst 目标地址
//
//返回:
**********************************************************************************/
uint8 * Base64_encode(uint8 *src,uint16 srclen)
{
uint16 n,buflen,i,j;
uint8 pading=0;
uint8 *buf;
uint8 *dst;
buf=src;
buflen=n=srclen;
if(n%3!=0) /* pad with '=' by using a temp buffer */
{
pading=1;
buflen=n+3-n%3;
buf=malloc(buflen+1);
memset(buf,0,buflen+1);
memcpy(buf,src,n);
for(i=0;i<3-n%3;i++)
buf[n+i]='=';
}
dst=malloc(buflen*4/3+1);
memset(dst,0,buflen*4/3+1);
for(i=0,j=0;i<buflen;i+=3,j+=4)
{
dst[j]=(buf[i]&0xFC)>>2;
dst[j+1]=((buf[i]&0x03)<<4) + ((buf[i+1]&0xF0)>>4);
dst[j+2]=((buf[i+1]&0x0F)<<2) + ((buf[i+2]&0xC0)>>6);
dst[j+3]=buf[i+2]&0x3F;
}
for(i=0;i<buflen*4/3;i++) /* map 6 bit value to base64 ASCII character */
src[i]=Base64_table[dst[i]];
free(dst);
if(pading)
free(buf);
return src;
}
/******************************************************************************
//
// end of file
******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -