zoukankan      html  css  js  c++  java
  • 用C++程序理解汉字的机内码表示

      汉字的编码是非常多刚開始学习的人不easy搞不明确的事情。最早的汉字字符集是GB2312-80,收入汉字6763个,符号715个,总计7478个字符,大陆普遍使用的简体字字符集。本文借助于一个能输出这些字符的简单的C++程序,体验汉字字符的编码。
      先简单介绍一下GB2312-80的概况。
      1、区位码
      每一个汉字及符号都有一个区位码,即每一个汉字有一个区号(两位十进制)和一个位号(两位十进制)。一共分了94个区,每一个区中有94个汉字。
      例如以下图了当中第1区和17区中的汉字:
        
      2、国标码
      汉字的国标码能够在区位码基础上换算得到:国标码=(区位码的十六进制表示)+2020H,国标码的取值范围:2121H~7E7EH。
      比如:“啊”的区码是16,位码为01,其区位码的十六进制表示为1001H,得到“啊”的国标码为:3021H。例如以下图:
       
      3、机内码
      中文或西文信息在计算机系统中的代码表示称为机内码。ASCII码是一种西文机内码,用一个字节表示,其最高位均为0。汉字机内码用连续两个字节表示,为能和ACSII符号区分,每一个字节的最高位是1。机内码和国标码的转换规则是:机内码 = 国标码+8080H =(区位码的十六进制表示)+A0A0H。显然,就是将国标码的两个字节的最高位均置为1就可以。
      比如,“啊”的国标码为:3021H,加上8080H后,其机内码为B0A1H,例如以下图所看到的:
       
      以下的程序,将GB2312-80中全部的汉字输出到一个文件里,对比上面的原理,读程序并执行,你将理解汉字在机器内部的表示。

    #include <iostream>
    #include <cstdio>
    using namespace std;
     
    int main()
    {
        int i,j;
        char a[3];  //用两字节表示一个汉字,a[0]为第1个字节,a[1]为第2个字节
        a[2]='';  //a[2]固定为'',作为保存一个汉字的字符串的结束
        freopen("chineseChar.txt","w",stdout);   //将输出重定向到文件,便于查看结果
        for(i=1;i<=94;i++)    //区号从1到94
        {
            cout<<"=====第 "<<i<<" 区======"<<endl;
            a[0] = i + 0xA0;   //将第1个字节变为机内码
            for(j=1;j<=94;j++) //位号从1到94
            {
                a[1] = j + 0xA0; //将第2个字节变为机内码
                cout<<a<<'	';   //输出a,里面有两字节,是i区j位汉字的机内码
                if(j%10==0)
                    cout<<endl;  //每10个换一行
            }
            cout<<endl;
        }
        return 0;
    }

      程序输出的全部汉字,见本文后附件。


      有了如上的知识,试执行以下的程序,看其结果是什么,而且试着做出解释。这是在处理汉字中常见的问题。
    #include <iostream>
    using namespace std;
    int main()
    {
        char a[]="汉字处理挺好玩";
        cout<<a<<endl;
        a[1]='a';
        cout<<a<<endl;
        a[2]='b';
        cout<<a<<endl;
        char b[10];
        b[8]='';
        cout<<b<<endl;
        return 0;
    }


     

    ==================== 迂者 贺利坚 CSDN博客专栏=================
    |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
    |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
    |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
    ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

    附件:程序输出的全部GB2312-80汉字和字符
    =====第 1 区======
      · ˉ ˇ ¨


    ± × ÷


    °
    ¤ §


    =====第 2 区======










    =====第 3 区======






    _



    =====第 4 区======










    =====第 5 区======










    =====第 6 区======
    Α Β Γ Δ Ε Ζ Η Θ Ι Κ
    Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ
    Φ Χ Ψ Ω
    α β γ δ ε ζ η θ
    ι κ λ μ ν ξ ο π ρ σ
    τ υ φ χ ψ ω
    ︿



    =====第 7 区======
    А Б В Г Д Е Ё Ж З И
    Й К Л М Н О П Р С Т
    У Ф Х Ц Ч Ш Щ Ъ Ы Ь
    Э Ю Я
    а б
    в г д е ё ж з и й к
    л м н о п р с т у ф
    х ц ч ш щ ъ ы ь э ю
    я

    =====第 8 区======
    ā á ǎ à ē é ě è ī í
    ǐ ì ō ó ǒ ò ū ú ǔ ù
    ǖ ǘ ǚ ǜ ü ê ɑ ń ň
    ɡ






    =====第 9 区======










    =====第 10 区======










    =====第 11 区======










    =====第 12 区======










    =====第 13 区======










    =====第 14 区======










    =====第 15 区======










    =====第 16 区======










    =====第 17 区======






    便



    =====第 18 区======


    簿







    =====第 19 区======






    齿



    =====第 20 区======
    穿

    椿


    蹿




    =====第 21 区======







    殿


    =====第 22 区======








    饿

    =====第 23 区======



    仿


    忿



    =====第 24 区======




    竿

    稿



    =====第 25 区======






    广



    =====第 26 区======





    非常

    鸿


    =====第 27 区======

    怀




    贿



    =====第 28 区======










    =====第 29 区======




    轿





    =====第 30 区======










    =====第 31 区======








    岿

    =====第 32 区======










    =====第 33 区======









    窿
    =====第 34 区======


    鹿

    绿





    =====第 35 区======










    =====第 36 区======








    尿

    =====第 37 区======










    =====第 38 区======










    =====第 39 区======










    =====第 40 区======










    =====第 41 区======










    =====第 42 区======
    湿

    使


    寿




    =====第 43 区======






    宿



    =====第 44 区======










    =====第 45 区======




    退





    =====第 46 区======








    西

    =====第 47 区======






    线



    =====第 48 区======








    婿

    =====第 49 区======





    沿




    =====第 50 区======

    耀



    亿




    =====第 51 区======







    屿


    =====第 52 区======










    =====第 53 区======










    =====第 54 区======


    仅仅







    =====第 55 区======




    姿





    =====第 56 区======
    廿
    丿








    =====第 57 区======










    =====第 58 区======



    诿






    =====第 59 区======










    =====第 60 区======










    =====第 61 区======










    =====第 62 区======










    =====第 63 区======










    =====第 64 区======










    =====第 65 区======










    =====第 66 区======










    =====第 67 区======










    =====第 68 区======



    涿






    =====第 69 区======










    =====第 70 区======






    驿



    =====第 71 区======










    =====第 72 区======










    =====第 73 区======



    槿






    =====第 74 区======










    =====第 75 区======










    =====第 76 区======










    =====第 77 区======










    =====第 78 区======










    =====第 79 区======










    =====第 80 区======










    =====第 81 区======










    =====第 82 区======










    =====第 83 区======










    =====第 84 区======






    羿



    =====第 85 区======



    趿






    =====第 86 区======




    鱿





    =====第 87 区======










    =====第 88 区======










    =====第 89 区======










    =====第 90 区======










    =====第 91 区======










    =====第 92 区======










    =====第 93 区======










    =====第 94 区======











  • 相关阅读:
    MaxScale智能读写
    flask简单demo
    django简单demo
    git原生私服之git&gitweb
    gerrit 解决中文乱码相关配置(转载)
    gerrit集成gitweb:Error injecting constructor, java.io.IOException: Permission denied
    gerrit: Error in POST /accounts/self/preferences
    redmine 配置邮件发送为async后,不能发送邮件(转载)
    gerrit error: unpack failed: error Permission denied
    centos修改hostname以及时间同步
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3805799.html
Copyright © 2011-2022 走看看