汉字区位码、国标码(交换码)和机内码转换方法

一、区位码

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

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

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

00110001 00000111

二、国标交换码

区位码无法用于汉字通信,因为它可能与通信使用的控制码(00H~1FH)(即0~31)发生冲突。(因为ASCII码编码中分控制信号编码和有型字符编码,前32个是控制码,如回车、换行、退格等,为避开这些控制码,国标码规定在区位码的基础上加20H,即32的16进制数)ISO2022规定每个汉字的区号和位号必须分别加上32(即二进制数00100000),经过这样的处理而得的代码称为国标交换码,简称交换码或国际码,因此,"学"字的国标交换码计算为:

00110001 00000111

+00100000 +00100000

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

01010001 00100111

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

三、机内码

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

因此,"学"字的机内码为:

11010001 10100111

用16进制表示即为D1A7H。

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

四、总结

区位码、国标码与机内码的转换关系

方法:

(1)区位码先转换成十六进制数表示

(2)(区位码的十六进制表示)+2020H=国标码;

(3)国标码+8080H=机内码

举例:以汉字"大"为例,"大"字的区内码为2083

示例解析:

1、区号为20,位号为83

2、将区位号2083转换为十六进制表示为1453H

3、1453H+2020H=3473H,得到国标码3473H

4、3473H+8080H=B4F3H,得到机内码为B4F3H

5、1453H+A0A0H=B4F3H,得到机内码为B4F3H

6、机内码B4F3H-A0A0H=1453H的区位码

大字的区码是20H(32区,83位)

时间: 2024-09-30 10:39:03

汉字区位码、国标码(交换码)和机内码转换方法的相关文章

GB2312汉字区位码、交换码和机内码转换方法 (ZT)

GB2312汉字区位码.交换码和机内码转换方法 (ZT) 为了适应计算机处理汉字信息的需要,1981年我国颁布了GB2312国家标准.该标准选出6763个常用汉字(其中,一级常用汉字3755个,二级汉字3008个)和682个非汉字字符,并为每个字符规定了标准代码,以便在不同的计算机系统之间进行汉字文本交换. GB2312字符集构成一个94行.94列的二维表,行号称为区号,列号称为位号,每一个汉字或符号在码表中的位置用它所在的区号和位号来表示. 为了处理与存储的方便,每个汉字的区号和位号在计算机内

中文区位码、国标码、机内码、输入码(外码)、字形码等

区位码 为了使每一个汉字有一个全国统一的代码,区位码是国家规定的94*94的一个方阵,其中每行叫做一个区,每列叫做一个位,组合起来就组成了区位码,我们可以在相关网站查询某个汉字的区位码,例如汉字“我”的区位码是46 50 ,标识“我”在46区,50位. 国标码 区位码+2020H. 国标码并不等于区位码,它是由区位码稍作转换得到.其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,;这样就得了一个与国标码有一个相对位置差的代码,;再将这个代码的第一个字节和第二个字节分别加上20H,就得

vc 文字转换到机内码,输入汉字和数字, 输出一串16进制码(数字-〉ASII码,汉字—〉国标码)

// 可以用,此程序实现的是是文字转换到机内码.机内码=国标码+8080H,不过学习了. //此程序是利用汉字在机器内输出就是机内码的原理,直接保存的,其实挺简单. //输入一串汉字和数字的混合字符, 经过程序转换, 对应输出一串16进制码(数字-〉ASII码,汉字—〉国标码) CString temp; GetDlgItemText(IDC_EDIT1,m_hanzi);//将汉字保存到变量m_hanzi unsigned char *b=new unsigned char[m_hanzi.G

区位码、国标码、机内码

1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80<信息交换用汉字编码字符集--基本集>,这个字符集是目前国内所有汉字系统的统一标准.它规定了用两个字节来表示一个汉字,每个字节都只能使用低7位,共有128*128种状态,又由于ASCII中的控制代码在汉字系统中也要使用,所以只剩下94*94=8836种状态用来表示国标码规定的6763个汉字和682个全角字符.每个字符都对应了唯一的区位码.国标码和机内码. 区位码 区位码是一个四位的十进制数,前两位叫

HDOJ 2030 汉字统计(借此题来谈谈ASCII码与汉字机内码)

ASCII码与汉字机内码: 在做HDOJ 2030 汉字统计一题中在讨论区看到有楼主发帖说汉字的ASCII码值为负数.但书中的ASCII码的范围又是0-255(其中0--127是国际通用标准码,128--255是拓展码). 经过请教大牛与查阅资料得,汉字并没有ASCII码,汉字是又机内码表示的,即ansi编码,是系统根据当前地区然后确定的当地编码,例如大陆的ansi编码就代表 国标码GBK编码.各个地区之间的机内码是有差异的. 汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一

嵌入式开发之字符叠加---gb2313 国标码,utf8 国际码,unicode 无码

(1)国标码简介 (2)编码转换 (3)时间获取 (4)显示切换 最近做了个字符叠加,包括时间叠加,字符中文叠加,位置移动,等功能开启.因为一般的字符叠加的点阵式16位,然后填充着16位的编码是gb2313编码,比如说视讯两个字, 先是视: 编码类型 二进制编码 十六进制编码 Unicode 10001001 11000110 0x89C6 UTF-8 11101000 10100111 10000110 0xE8A786 GB2312 11001010 11010011 0xCAD3 然后讯:

刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK

简体汉字编码方案(GB2312.GBK.GB18030.GB13000)以及全角.半角.CJK 一.概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256).但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只能表示256个字符,肯定是不够的,因此只能使用多个字节来表示一个字符. 于是当计算机被引入到中国后,相关部门设计了GB系列编码("GB"为"国标"的汉语拼音首字母缩写,即&q

刨根究底字符编码之零——前言

前言 (图片来自网络) 字符编码是计算机世界里最基础.最重要的一个主题之一.不过,在计算机教材中却往往浮光掠影般地草草带过,甚至连一本专门进行深入介绍的著作都找不到(对这一点我一直很困惑,为什么就没有哪位大牛对这个如此基础.重要而又如此容易让人困惑的主题写一本专著予以介绍呢). 而在编程实践中,如果不发扬死磕到底的精神将字符编码问题的来龙去脉.前世今生彻底搞清楚,那么它终将会像幽灵一样挥之不去,导致时不时地被各种与字符编码相关的"灵异"事件折磨得死去活来. 本人正是在经受了字符编码所带

汉字编码

机内码.国际码.区位码之间的换算 字符编码的两种表示方式: ASCII(字符的表示):GB2312(国标码,汉字编码) 区位码:1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80<信息交换用汉字编码字符集>基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准. 国际码:在汉字计算机编码标准中,目前最大的汉字编码是台湾的标准CNS11643,目前(4.0)共收录可考证之繁简.日.韩语汉字共76,067个,但并不普及,