📄 decode64.c
字号:
/*==================================================================================*/
/* Copyright (c) 2003,厦门海晟信息技术有限公司
* all right reserved
*
* 文件名称: decode.c
* 文件标识
* 摘要:编解码文件
*
* 版本号:1.0
* 作者:小陈
* 完成日期:2004年1月17日
*
* 取代版本
* 原作者:
* 完成日期:
*/
/*==================================================================================*/
#include <ppsm.h>
#include <m68328.h>
#include <proto.h>
#include <stdio.h>
#include <main.h>
#include <commondlg.h>
#include "decode64.h"
char* BaseTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
/****************************************************************
static char FindInTable(char CSource)
功能:查找
输入:待查找字符
输出:
****************************************************************/
static char FindInTable(char CSource)
{
int i=0;
while (CSource!=BaseTable[i])
i++;
return i;
}
/****************************************************************
void Encode64(char * szSource)
功能:编码
输入:待编码字符串
输出:已编码字符
****************************************************************/
void Encode64(char * szSource)
{
int Times, LenSrc, i;
char x1, x2, x3, xt;
char * result;
int j;
LenSrc = strlen(szSource);
Times = LenSrc/3;
result = (char *)Lcalloc((Times+1)*4+1);
for (i=0;i<Times;i++)
{
x1 = szSource[i*3];
x2 = szSource[i*3+1];
x3 = szSource[i*3+2];
result[i*4]=(x1>>2) & 0x3f;
xt = (x1<<4) & 0x30;
xt = xt + ((x2>>4) & 0x0f);
result[i*4+1]=xt;
xt = (x2<<2) & 0x3c;
xt = xt + ((x3>>6) & 0x03);
result[i*4+2]=xt;
result[i*4+3]=x3 & 0x3f;
}
if (LenSrc%3==1)
{
x1=szSource[i*3];
result[i*4]=(x1>>2) & 0x3f;
result[i*4+1]=(x1<<4) & 0x30;
result[i*4+2]=64;
result[i*4+3]=64;
i++;
}
else if (LenSrc%3==2)
{
x1=szSource[i*3];
x2=szSource[i*3+1];
result[i*4]=(x1>>2) & 0x3f;
xt = (x1<<4) & 0x30;
xt = xt + ((x2>>4) & 0x0f);
result[i*4+1]= xt;
result[i*4+2]= (x2<<2) & 0x3c;
result[i*4+3]=64;
i++;
}
j=i*4;
for (i=0;i<j;i++)
result[i]=BaseTable[result[i]];
result[j]='\0';
strncpy(szSource, result, strlen(result));
if(result)
{
Lfree(result);
result = NULL;
}
}
/****************************************************************
bool Decode64(char* szSource)
功能:解码
输入:待解码字符串
输出:已解码字符
****************************************************************/
void Decode64(char* szSource)
{
int Times, LenSrc, i;
char x1,x2,x3,x4,xt;
char * result;
LenSrc=strlen(szSource);
Times = LenSrc/4;
result = (char *)Lcalloc(Times*3+1);
for (i=0;i<Times;i++)
{
x1=FindInTable(szSource[i*4]);
x2=FindInTable(szSource[i*4+1]);
x3=FindInTable(szSource[i*4+2]);
x4=FindInTable(szSource[i*4+3]);
xt = (x1<<2) & 0xfc;
xt = xt + ((x2>>4) & 0x03);
result[i*3]=xt;
if (x3==64)
{
result[i*3+1]= '\0';
break;
}
xt = (x2<<4) & 0xf0;
xt = xt + ((x3>>2) & 0x0f);
result[i*3+1]=xt;
if (x4==64)
{
result[i*3+2]= '\0';
break;
}
xt = (x3<<6) & 0xc0;
xt = xt + x4;
result[i*3+2]=xt;
}
if (i==Times)
result[i*3]= '\0';
strncpy(szSource, result, strlen(result));
if(result)
{
Lfree(result);
result = NULL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -