📄 unicodegbtrans.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 + -