您的位置:首页 > 其它

BIG5 GBT字符转换

2009-10-01 22:46 393 查看
//---------------------------------------------------------------------------
//函数输入Big5字符,返回Gb简体字符
//---------------------------------------------------------------------------
const CString Big2Gb(LPCTSTR pszBig5)
{
wchar_t*  wszUnicode=NULL;  //Unicode编码的字符
char*  pszGbt=NULL;  //Gb编码的繁体字符
char*  pszGbs=NULL;  //Gb编码的简体字符
CString sGb = _T("");  //返回的字符串
int  iLen=0;  //需要转换的字符数

iLen=MultiByteToWideChar  (950,  0,  pszBig5,  -1,  NULL,0)  ; //计算转换的字符数

wszUnicode=new  wchar_t[iLen+1];//给wszUnicode分配内存

MultiByteToWideChar  (950,  0,  pszBig5,  -1,  wszUnicode,iLen);//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar

iLen=WideCharToMultiByte  (936,  0,  (PWSTR)  wszUnicode,  -1,  NULL,0,  NULL,  NULL)  ;//计算转换的字符数

pszGbt=new  char[iLen+1];//给pszGbt分配内存
pszGbs=new  char[iLen+1];//给pszGbs分配内存

WideCharToMultiByte  (936,  0,  (PWSTR)  wszUnicode,  -1,  pszGbt,iLen,  NULL,  NULL)  ; //转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte
LCMapString(0x0804, LCMAP_SIMPLIFIED_CHINESE,  pszGbt,  -1,  pszGbs,  iLen);  //转换Gb码繁体到Gb码简体,使用API函数LCMapString

sGb=pszGbs; //返回Gb码简体字符

//释放内存
delete  []  wszUnicode;
delete  []  pszGbt;
delete  []  pszGbs;

return  sGb;
}

//---------------------------------------------------------------------------
//函数输入Gb字符,返回Big5字符
//---------------------------------------------------------------------------
CString Gb2Big(LPCTSTR pszGbs)
{
char*  pszGbt=NULL;  //Gb编码的繁体字符
wchar_t*  wszUnicode=NULL;  //Unicode编码的字符
char*  pszBig5=NULL;  //Big5编码的字符
CString sBig5 = _T("");  //返回的字符串
int  iLen=0;  //需要转换的字符数

iLen = MultiByteToWideChar(936,  0,  pszGbs,  -1,  NULL,0);//计算转换的字符数

pszGbt=new  char[iLen*2+1];//给pszGbt分配内存

LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE,  pszGbs,  -1,  pszGbt,  iLen*2); //转换Gb码简体到Gb码繁体,使用API函数LCMapString

wszUnicode=new  wchar_t[iLen+1]; //给wszUnicode分配内存

MultiByteToWideChar  (936,  0,  pszGbt,  -1,  wszUnicode,iLen);//转换Gb码到Unicode码,使用了API函数MultiByteToWideChar
iLen=WideCharToMultiByte  (950,  0,  (PWSTR)  wszUnicode,  -1,  NULL,0,  NULL,  NULL)  ; //计算转换的字符数

//给pszBig5分配内存
pszBig5=new  char[iLen+1];

WideCharToMultiByte  (950,  0,  (PWSTR)  wszUnicode,  -1,  pszBig5,iLen,  NULL,  NULL)  ; //转换Unicode码到Big5码,使用API函数WideCharToMultiByte

sBig5=pszBig5; //返回Big5码字符

//释放内存
delete  []  wszUnicode;
delete  []  pszGbt;
delete  []  pszBig5;

return  sBig5;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: