• 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 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).


  • 相关阅读:
    制品库 Jfrog Artifactory 搭建私服
    发布制品到私服 Nexus
    项目中如何使用私服 Nexus
    Centos7 上手 Docker 容器及 dockercompose
    项目使用 Jfrog Artifactory 制品库
    企业DevOps之路:Jenkins 整合 SonarQube代码质量自动扫描
    发布制品到 Jfrog Artifactory
    企业DevOps之路:私有镜像仓库 Harbor 搭建
    项目管理和缺陷跟踪系统 Redmine
    Nexus 私有制品库搭建
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309945.html
Copyright © 2020-2023  润新知