打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GB2312汉字机内码、国标码和区位码教程 [原创推荐] - 江边鸟的日志 - 网易博客

卷首语:互联、开放、共享、自由、技术。                          

------作者·江边鸟

做学问不要小看任何一个不起眼的知识点。  

本文部分摘自互联网,另一部分为原创;欢迎共同学习、交流。旨在为广大朋友提供思想,即使没有计算机基础的朋友也能根据步骤进行计算。

一、相关解析:

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

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

GB码的机内码为二字节长的代码,它是在相应GB码的每个字节最高位上加“1”,即

汉字机内码=汉字国标码+8080H

例如,上述“啊”字的国标码是3021H,其汉字机内码则是B0A1H。

汉字机内码的基础是汉字国标码。

机内码:为了避免ASCII码和国标码同时使用时产生二义性问题,大部分汉字系统都采用将国标码每个字节高位置1作为汉字机内码。这样既解决了汉字机内码与西文机内码之间的二义性,又使汉字机内码与国标码具有极简单的对应关系。

汉字机内码、国标码和区位码三者之间的关系为:区位码(十进制)的两个字节分别转换为十六进制后加20H得到对应的国标码;机内码是汉字交换码(国标码)两个字节的最高位分别加1,即汉字交换码(国标码)的两个字节分别加80H得到对应的机内码;区位码(十进制)的两个字节分别转换为十六进制后加A0H得到对应的机内码。

举例:机内码位BEDF,求区位码?

有两种解法:1.BEDFH-A0A0H=1E3FH=7743D;   

2.BEDFH-8080H=3E5FH(国标码),3E5FH-2020H=1E3FH=7743D。

二、扩展补充:

为了适应计算机处理汉字信息的需要,1981年我国颁布了GB2312国家标准。该标准选出6763个常用汉字(其中,一级常用汉字3755个,二级汉字3008个)和682个非汉字字符,并为每个字符规定了标准代码,以便在不同的计算机系统之间进行汉字文本交换。

GB2312字符集构成一个94行、94列的二维表,行号称为区号,列号称为位号,每一个汉字或符号在码表中的位置用它所在的区号和位号来表示。

为了处理与存储的方便,每个汉字的区号和位号在计算机内部分别用一个字节来表示。例如,“学”字的区号为49,位号为07,它的区位码即为4907,用2个字节的二进制数表示为:

00110001 00000111

区位码无法用于汉字通信,因为它可能与通信使用的控制码(00H~1FH)(即0~31)发生冲突。ISO2022规定每个汉字的区号和位号必须分别加上32(即二进制数00100000),经过这样的处理而得的代码称为国标交换码,简称国标码或交换码,因此,“学”字的国标交换码计算为:

00110001      00000111

+00100000   +00100000

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

01010001      00100111

用十六进制数表示即为5127H。

由于文本中通常混合使用汉字和西文字符,汉字信息如果不予以特别标识,就会与单字节的ASCII码混淆。此问题的解决方法之一是将一个汉字看成是两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位都为1。这种高位为1的双字节汉字编码即为GB2312汉字的机内码,简称为内码。

因此,“学”字的机内码为:

11010001 10100111

用16进制表示即为D1A7H。

最后要指出的是,汉字的输入编码与汉字的机内码是不同范畴的概念。不管采用什么样的编码输入法(例如拼音、五笔字型等)来输入一个汉字,其机内码都是相同的。

三、计算方法与注意事项总结:

(1)、机内码、国标码和区位码都是两个字节的字符表示形式;机内码和国标码为十六进制,区位码为十进制标准码;

(2)、不同进制进行运算时,须先转化为同进制再运算;运算结果也是相同进制;根据编码标准进行相应转换,以得到最终结果;(特别注意:区位码参与运算,转化为十六进制;结果为十六进制,再次转化为十进制标准码;)

(3)、公式:汉字机内码=汉字国标码+8080H

汉字国标码=汉字区位码+2020H

变换:汉字区位码=汉字国标码-2020H

汉字国标码=汉字机内码-8080H

或公式:汉字区位码=汉字机内码-A0A0H

汉字机内码=汉字区位码+A0A0H

二进制反推法:(该公式须将所有运算数转化为二进制)

汉字机内码=汉字国标码(每字节)最高位加1

汉字国标码=汉字区位码(每字节)+00100000(即加32)

附:二进制反推法计算详解:

实例1:机内码为十六进制D147H,计算其国标交换码和区位码?

解题步骤:方法一(根据以上转换方法反推)

(机内码)十六进制      D147H

转换(机内码)二进制  11010001   01000111

最高位降1                        01010001   00100111

再次转换为十六进制    5127H     (即是国标交换码)

列出国标码二进制       01010001     00100111

两字节各减32 ,即减 00100000     00100000 

所得二进制为区位码    00110001     00000111    (即是区位码)

十六进制表示则为      3107H

区位码为十进制标准码,因此再转换为十进制为 4907。 

实例1:机内码为十六进制D0A3H,计算其国标交换码和区位码?

解题步骤:方法一(根据以上转换方法反推)

(机内码)十六进制      D0A3H

转换(机内码)二进制   11010000     10100011

最高位降1                         01010000     00100011

再次转换为十六进制    5023H     (即是国标交换码)

列出国标码二进制       01010000     00100011

两字节各减32 ,即减  00100000     00100000 

所得二进制为区位码   00110000     00000011    (即是区位码)

十六进制表示则为      3003H

区位码为十进制标准码,因此再转换为十进制为 4603。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系
「神马课堂」山东省专升本计算机文化基础知识点(一)
基于哈希表和二叉树的词典研究(一)
ALT+数字大全
汉字的ASC值为什么会是负数
第四章 汉字信息处理基础知识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服