⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decode64.c

📁 实现BASE64编码
💻 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 + -