?? 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 + -