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

📄 unicodegbtrans.cpp

📁 实现GB2312到UCS2/unicode的相互转换
💻 CPP
字号:
#include "stdafx.h"

#include "unicodeGBTrans.h"
/*
函数功能:将UCS编码转化为GB2312编码

*/
int gsmDecodeUcs2(const unsigned char * src, char * dst,int srclen)
{
	unsigned short unicode,gb,temp;
	int cnt,i;

	gb = 0;
	cnt=0;
	for(i=0;i<srclen;)
	{
		

		unicode = (unsigned short)src[i++];
		unicode *= 256;
		unicode += (unsigned short)src[i++];

	
		if(unicode < 0x0080)	//在Ox0080为英文字母,与ASCII兼容	
		{	gb = unicode;
		dst[cnt++] = (unsigned char)(gb&0x007f);
		continue;
		}
	    //下面是分区块对应
		else if((unicode >= 0x4e00) && (unicode <= 0x9fa0))
		{
			gb = unicode2gb_0x4E00_0x9FA0[unicode - 0x4e00];
		}
		else if((unicode >= 0xff01) && (unicode <= 0xFFE5))
		{
			gb = unicode2gb_0xFF01_0xFFE5[unicode - 0xFF01];
		}
		else if((unicode >= 0x3000) && (unicode <= 0x3229))
		{
			gb = unicode2gb_0x3000_0x3229[unicode - 0x3000];
		}
		else if((unicode >= 0x2015) && (unicode <= 0x2642))
		{
			gb = unicode2gb_0x2015_0x2642[unicode - 0x2015];
		}
		else if((unicode >= 0x00A4) && (unicode <= 0x0451))
		{
			gb = unicode2gb_0x00A4_0x0451[unicode - 0x00A4];
		}
		else 
		{
			gb = 0xa1f5;
		}
		dst[cnt++] = (unsigned char)(gb/0x0100);
		dst[cnt++] = (unsigned char)(gb&0x00ff);
	}
	dst[cnt] = 0;

	return cnt;//转换成GB2312后的字节数,汉字占两个字节,字母占一个字节。
}
/*
//将GBK编码的汉字串转换成UCS,但不是以16位的short存储,而是将一个UCS的高底字节分别用一个unsiged char 存储
//参数:src为GB2312字符串,以'0'结束
//返回的是用来存储UCS的unsiged char 的个数gsmEncodeUcs2(pSrc->TP_UD, &buf[4], nLength)
*/
int gsmEncodeUcs2(const char* src, unsigned char* dst, int srclen)
{
	unsigned short unicode,tmp;//tmp 表示汉字内码
	int cnt,i=0;
	unsigned char chH,chL,num=0;
    
	for(cnt=0;cnt<srclen;)
	{
		chH = src[cnt++];
		if(chH < 0x80)
		{
			if(0 != chH)
			{
				unicode = chH;
				num++;
			}
			else
			{
				break;
			}
		}
		else
		{
			if((chH >= 0xb0) && (chH <= 0xf7))
			{
				chL = src[cnt++];
				if((chL >= 0xa1) && (chL != 0xff))
				{
					chH -= 0xb0;
					chL -= 0xa1;
					tmp = chH;
					tmp *= 94;
					tmp += chL;
					unicode = gb2unicode_0xb0_0xf7[tmp];
					num++;
				}
				else
				{
					unicode = 0x25A1;
					num++;
				}
			}
			else if((chH >= 0xa0) && (chH <= 0xa9))
			{
				chL = src[cnt++];
				if((chL >= 0xa1) && (chL != 0xff))
				{
					chH -= 0xa1;
					chL -= 0xa1;
					tmp = chH;
					tmp *= 94;
					tmp += chL;

					unicode = gb2unicode_0xa1_0xa9[tmp];
					num++;
				}
				else
				{
					unicode = 0x25A1;
					num++;
				}
			}
			else
			{
				unicode = 0x25A1;
				num++;
			}
		}
		*dst++=unicode >> 8;
		*dst++=unicode & 0xff;


	}

	return num*2;


}

⌨️ 快捷键说明

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