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

📄 codeswitch.cpp

📁 代码使用eVC4.0调试通过
💻 CPP
字号:
#include "StdAfx.h"
#include "GHeader.h"

CCodeSwitch codeswitch;

CCodeSwitch::CCodeSwitch()
{
}
CCodeSwitch::~CCodeSwitch()
{
}

BOOL CCodeSwitch::Encode64Text(char tmpmessage[], char *entext)
{
	//把数据变为64进制编码
	char ASC64[65];
	int i,k,Length,j;

	for(i=0;i<12;i++)
		ASC64[i]=48+i;
	for(i=12;i<38;i++)
		ASC64[i]=53+i;
	for(i=38;i<64;i++)
		ASC64[i]=59+i;
	ASC64[64]='\0';

	Length=strlen(tmpmessage);
	
	k=0;
	j=0;	
	for(i=0,k=0,j=0;i<Length/3;i++)
	{		
		//取第一字高六位
		entext[k++]=(tmpmessage[j]>>2)&0x3F;
		//取第一字低二位 和第二字高四位
		entext[k++]=((tmpmessage[j]<<4)|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
		//取第二字低四位 和第三字高二位
		entext[k++]=(tmpmessage[j+1]<<2|((tmpmessage[j+2]>>6)&0x03))&0x3F;
		//取第三字低六位
		entext[k++]=tmpmessage[j+2]&0x3F;
		j=j+3;
	}
	if(Length%3==0)
		entext[k]=0;
	if(Length%3==1)
	{
		//取第一字高六位
		entext[k++]=(tmpmessage[j]>>2)&0x3F;
		//取第一字低二位
		entext[k++]=(tmpmessage[j]<<4)&0x3F;
		entext[k]=0;
	}
	if(Length%3==2)
	{
		//取第一字高六位
		entext[k++]=(tmpmessage[j]>>2)&0x3F;
		//取第一字低二位 和第二字高四位
		entext[k++]=(tmpmessage[j]<<4|((tmpmessage[j+1]>>4)&0x0F))&0x3F;
		//取第二字低四位
		entext[k++]=(tmpmessage[j+1]<<2)&0x3F;
		entext[k]=0;
	}
	Length=strlen(entext);
	for(i=0;i<k;i++)
		entext[i]=ASC64[entext[i]];
	entext[k]=0;

	return TRUE;
}

BOOL CCodeSwitch::Decode64Text(char entext[], char *detext)
{
	char ASC64[65];
	int i=0,len=0,rlen,klen;
	char tmp[1024];
	for(i=0;i<12;i++)
		ASC64[i]=48+i;
	for(i=12;i<38;i++)
		ASC64[i]=53+i;
	for(i=38;i<64;i++)
		ASC64[i]=59+i;
	strcpy(tmp,entext);
	len=strlen(entext);
	for(i=0;i<len;i++)
	{
		for(rlen=0;rlen<64;rlen++)
		{
			if(tmp[i]==ASC64[rlen])
			{
				tmp[i]=rlen;
				break;
			}
		}
	}

	klen=0;
	rlen=0;
	for(i=0;i<(len)/4;i++){
		detext[rlen++]=(tmp[klen]<<2)|((tmp[klen+1]>>4)&0x03);
		detext[rlen++]=(tmp[klen+1]<<4)|((tmp[klen+2]>>2)&0x0F);
		detext[rlen++]=(tmp[klen+2]<<6)|(tmp[klen+3]&0x3F);
		klen=klen+4;
	}
	if((len)%4==0){
		detext[rlen]=0;
	}
	if((len)%4==3){
		detext[rlen++]=(tmp[klen]<<2)|((tmp[klen+1]>>4)&0x03);
		detext[rlen++]=(tmp[klen+1]<<4)|((tmp[klen+2]>>2)&0x0F);
		detext[rlen]=0;			
	}
	if((len)%4==2){
		detext[rlen++]=(tmp[klen]<<2)|((tmp[klen+1]>>4)&0x03);
		detext[rlen]=0;
	}
	detext[rlen]=0;

	return TRUE;
}

BOOL CCodeSwitch::Encode16Text(char smsTxt[], char *smsp)
{
	char temp[10]="\0";
	size_t CountI=0;
	size_t maxTxt=0;
	wchar_t tSMS[512];

	maxTxt=MultiByteToWideChar (CP_ACP,0,smsTxt,-1,tSMS, 512);
	for(CountI=0;CountI<wcslen(tSMS);CountI++)
	{	
		strcpy(temp,"\0");
		sprintf(temp,"%04X\0",tSMS[CountI]);
		strcat(smsp,temp);
	}
	return TRUE;
}

BOOL CCodeSwitch::Decode16Text(char buf[], char *temp)
{
	WCHAR lpUnicode[1024];
	char tmp[1024]="\0";
	for(int i=0;i<(int)strlen(buf);i+=4)
	{
		memcpy(tmp,buf+i,4);
		tmp[4]='\0';
		sscanf(tmp,"%X",&lpUnicode[i/4]);
	}
	tmp[i]='\0';
	//memcpy(lpUnicode,tmp,strlen(tmp));
	WideCharToMultiByte (CP_ACP,0,lpUnicode,-1,temp,256,NULL,NULL);
	return TRUE;
}

BOOL CCodeSwitch::Decode7Text(char buf[], char *code)
{
	char tmp[3]="\0",ch;
	int CountI=0,First=0,Second=0;
	int Add=0;
	for(CountI=0;CountI<(int)strlen(buf);CountI+=2)
	{
		strcpy(tmp,"\0");
		First=0;
		Second=0;
		strncpy(tmp,buf+CountI,2);
		tmp[2]='\0';
		if(Add==0)
		{
			sscanf(tmp,"%x",&First);//把字符串作为十六进制
			ch=(First&0x7F);
		}
		else
		{
			sscanf(tmp,"%x",&Second);//把字符串作为十六进制
			//=HexToDecimal(tmp,2);
			strncpy(tmp,buf+CountI-2,2);
			tmp[2]='\0';
			sscanf(tmp,"%x",&First);//把字符串作为十六进制
			ch=((((First&0xFF)>>(8-Add%7))|((Second&0xFF)<<(Add%7)))&0x7F);
		}
		sprintf(tmp,"%c\0",ch);
		strcat(code,tmp);
		if(Add==6)
		{
			strncpy(tmp,buf+CountI,2);
			tmp[2]='\0';
			sscanf(tmp,"%x",&First);//把字符串作为十六进制
			ch=(((First&0xFF)>>1))&0x7F;
			sprintf(tmp,"%c\0",ch);
			strcat(code,tmp);
			Add=0;
		}
		else
			Add+=1;
		
	}
	return TRUE;
}

//英文字符编码为7位,最高位为0,为了发送英文字符,
//可以使用压缩7位编码方式:即7为压缩,能够发送更多字符(160个)
//本函数为把英文最高位压缩掉,可以发送最多160个汉字,如果不压缩,只能发送140个字符
BOOL CCodeSwitch::Encode7Text(char buf[], char *code)
{
	int str=0;
	char temp[10]="\0";
	int CountI=0;
	int Add=0;
	for(CountI=0;CountI<(int)strlen(buf);CountI++)
	{
		Add+=1;
		strcpy(temp,"\0");
		if(CountI==(int)strlen(buf)-1)
			str=((buf[CountI]&0x7F)>>(Add%8-1));
		else
			str=((((buf[CountI]&0x7F)>>(Add%8-1))|((buf[CountI+1]&0x7F)<<(8-Add%8)))&0xFF);
		sprintf(temp,"%02X",str);
		strcat(code,temp);
		if(Add%7==0)
		{
			Add=0;
			CountI+=1;
		}
	}
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -