VC文本编辑框获取汉字内码

     这几天,帮一个学长一起弄毕业设计,关于实现一个5110的内嵌中文字库,其中需要写一个VC窗口,说简单点就是输入一个汉字,获取它的内码,涉及到了汉字编码问题。

     先说说汉字内码,汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接受后就由汉字操 作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法无关。机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机 器内部都要转换成机内码,才能被存储和进行各种处理。

     汉字在计算机内部其内码是唯一的。因为汉字处理系统要保证中西文的兼容,当系统中同时存在ASCII码和汉字国标码时,将会产生二义性。例如:有两个字节的内容为30H和21H,它既可表示汉字“啊”的国标码,又可表示西文“0”和“!”的ASCII码。为此,汉字机内码应对国标码加以适当处理和变换。

     GB码的机内码为二字节长的代码,它是在相应GB码的每个字节最高位上加“1”,即汉字机内码=汉字国标码+8080H。例如,上述“啊”字的国标码是3021H,其汉字机内码则是B0A1H。

     原理讲完了,这个VC程序怎么实现呢?

     很简单,分别取出区码和位码,注意调换一下位置就可以了。

 

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)  
{  
    switch(id)  
    {  
        case IDC_OK:  
              
        TCHAR ps[256];  
        TCHAR name2[256];  
        unsigned short int tmp;  
        TCHAR t;  
        GetDlgItemText(hwnd, IDC_EDIT1, ps, sizeof(ps));      
        t=*ps;  
        *ps=*(ps+1);  
        *(ps+1)=t;  
        tmp=*(short int*)ps;  
        itoa(tmp,name2,16);  
        //wsprintf(name2, "%d", tmp);  
        SetDlgItemText(hwnd, IDC_EDIT2, name2);  
              
        break;  
        default:  
        break;  
    }  
}  

------------------------------------------------------------------------------------------------------------------

作者:庞辉

出处:http://www.cnblogs.com/pang123hui/

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).

 


posted @ 2010-10-24 22:46  云说风轻  阅读(1100)  评论(0编辑  收藏  举报