区位码、国标码与机内码的转换关系
- 格式:doc
- 大小:22.50 KB
- 文档页数:1
实验一汉字编码与校验设计实验一、实验目的本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换电路,能批量获取汉字机内码并用点阵形式进行显示。
通过设计16 位数据的海明编解码电路,16 位数据的CRC 并行编解码电路,帮助同学们理解校验码传输过程。
通过校验码流水传输实验帮助大家提前建立流水线的基本概念二、实验原理、内容与步骤实验原理、实验内容参考:1、汉字编码原理1)机内码与区位码区位码转换为十六进制+2020H得到国标码,国标码+8080H得到机内码。
区位码(十六进制)+A0A0H=机内码机内码-A0A0H=区位码(十六进制)2)存储器数据编辑使用实验里附带的十六进制编辑器,在使用ASCII码保存的记事本编辑,记得得到。
2、汉字编码电路设计国标转区位码汉字显示3、海明编码原理与设计1)编码原理若有效消息b1b2b3b4=1011,则先将它分别填入第3,5,6,7位,再分组进行奇偶统计,分别填入校验位P1,P2,P3的值。
这里分组采用偶校验,因此,要保证3组校验位的取值都满足偶校验规则。
各校验码的取值如下:P1=H3⊕H5⊕H7=b1⊕b2⊕b4=1⊕0⊕1=0P2=H3⊕H6⊕H7=b1⊕b3⊕b4=1⊕1⊕1=1P3=H5⊕H6⊕H7=b2⊕b3⊕b4=0⊕1⊕1=0这样就得到了海明码2)分组原理在海明码H1~Hn中,位号数(1,2,3,。
,n)为2的权值的那些位,即1(20),2,4,。
,2r-1位,作为奇偶校验码,并记作P1,P2,P3,。
,P r,余下各位则为有效信息位。
与N=11,k=7,r=4相应海明码可示意为位号 1 2 3 4 5 6 7 8 9 10 11P i占位P1P2 b1 P3 b2 b3 b4 P4 b5 b6 b7其中,b i均为有效信息。
3)校验位逻辑与电路设计海明编码4、海明解码原理与设计1)检错码原理与作用海明编码在解码过程中,被分作3组校验,每组可产生一个检错消息,3组共3个检错消息便可构成一个指错字,由G3 G2 G1组成,其中G3=P3⊕b2⊕b3⊕b4,G2=P2⊕b1⊕b3⊕b4,G1=P3⊕b1⊕b2⊕b4,3个指错字共表示8种状态,在没有出错的情况下,G3 G2 G1=000.由于在分组时就确定了每组校验位参与校验的组别,所以,指错字能准别地知错错误所在位2)错误逻辑原理与设计当目的部件接收到一-组海明码后,送人电路进行分组并检测,得到检错字信息G,G2G,这组信息通过译码电路译码,给出出错(或无错)的信号,这个信号就是纠错的依据。
区位码,汉字交换码和汉字机内码的概念是什么?它们之间有什么关系?区位码:1981年国家颁布了GB2312汉字标准共有6763个,其中一级3755,二级3008,还有682非汉字字符。
并为每个字符规定了标准编码,便于在计算机内部相互转换。
作为GB2312标准只是定义了一张94×94的二维表。
其中行为区号,列为位号。
这样可以利用区号和位号来找到其中的汉字。
这种编码就是我们所说的区位码。
比如陈(1934) 区号:19 位号:34,为了处理与存储的方便,每个汉字的区号和位号在计算机内部分别用一个字节来表示区位码无法于汉字进行通信,因为ASCII码中规定了OOH-1F作为控制码使用,这样就发生了冲突。
由于计算机不是中国人发明的所以只能听从于国际标准ISO2022规定区号和位号都加上32(20H),这样就防止冲突。
经过加上32以后的编码称为国际交换码陈-区号:19+32= 5100010011+00100000=00110011位号:34+32=6600100010+00100000=01000010即5166 16进制3342由于文本中通常混合使用汉字和西文字符,汉字信息如果不予以特别标识,就会与单字节的ASCII码混淆。
此问题的解决方法之一是将一个汉字看成是两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位都为1。
这种高位为1的双字节汉字编码即为GB2312汉字的机内码,简称为“内码”.00110011最高位变为1则从33变为B301000010最高位变为1则从42变为C2这样一来,陈的机内码应该为B3C2这里要说明的是不管你是采用什么样的输入法输入汉字,其汉字的机内码都是相同的。
如果要从一个汉字的机内码转换为区位码,其实就是相反的方向进行运算.。
汉字区位码、国标码(交换码)和机内码转换方法一般换算全部用十六进制。
机内码、国际码是十六进制的,区位码是十进制的。
具体换算步骤:(H表示十六进制,D表示十进制)1.将四位区号分为两部分,两位数为一组。
2.把这两个数字转换成十六进制,用公式计算。
国际码=区位码(十六进制)+2020H机内码=国际码+8080H例如:某汉字的区位码是2534。
则25D=19H,34D=22H则国际码=1922H+2020H=3952H,机内码=3952H+8080H=B9D2H 1、转换关系:【设转为十六进制的区位码为区位码I;转换原因在第3点】•区位码I=区位码的区码(前两位)和位码(后两位)分别转十六进制再按原顺序组合起来•国标码•=区位码I+2020H 【2020H不拆分】•机内码=国标码+8080H【8080H不拆分】•机内码=区位码I+A0A0H【A0A0H不拆分】注意:区位码是十进制表示,由区(行)和位(列)组成一个二维结构,所以转换过程需要将区位码拆分后分别转十六进制。
2、例子:•将“江”的区位码2913转为机内码【末尾D代表十进制,末尾H代表十六进制】:1、2913D中区和位分别转十六进制:29D=1DH,13D=DH2、国标码=区位码+2020H=1D0DH+2020H=3D2DH3、机内码=国标码+8080H=3D2DH+8080H=BDADHor 机内码=区位码+A0A0H=1D0DH+A0A0H=BDADH3、扩展【扩展内容主要与为什么要加2020H或8080H这些有关】:区位码:每个汉字都有唯一的定位码,定位码一个字节,定位码一个字节,总共占用两个字节。
国标码:。
共7445个字符,其中一级3755个,二级3008个,图形符号682个【一级汉字按拼音排序,二级用部首排序】,全部国家标准代码被放置在94个区域中,每个区域中有94个矩阵。
每个字节占用8位,主要使用7位编码(高位为0)。
- 为啥要将区位码转为国标码?汉字编码之前,已经有了标准的ASCII,开发者只沿用了ASCII中32个控制字符其他ASCII被覆盖。
汉字国标码,机内码和区位码的不同汉字是中华文化的瑰宝,是中华民族的文化符号。
在现代社会中,汉字的应用范围越来越广泛,汉字输入也成为人们日常生活中不可或缺的一部分。
汉字输入需要用到汉字国标码、机内码和区位码,这三种码制虽然都是用来表示汉字的,但它们之间存在着不同,下面我们就来一一探究。
一、汉字国标码汉字国标码是由国家标准化委员会制定的一种汉字编码体系,也称为GB码或GB2312码。
它是在1980年提出的,是我国第一个汉字编码标准,其编码范围包括了6763个常用汉字和682个生僻字,共计7445个汉字。
汉字国标码采用两字节表示一个汉字,每个字节的取值范围是0xA1~0xFE,共计94个字符,其中0xA1~0xA9和0xF7~0xFE 是用来表示第一字节的,0xA1~0xFE是用来表示第二字节的。
汉字国标码的优点是编码规范,兼容性好,适用范围广,能够兼容各种操作系统和软件程序,因此在汉字输入中得到了广泛应用。
但其缺点也比较明显,就是字符集太小,不支持繁体字和一些特殊符号。
二、机内码机内码是计算机内部使用的一种二进制编码体系,也称为ASCII 码。
它是由美国信息交换标准委员会在1963年制定的,其编码范围包括了128个字符,包括了英文字母、数字、标点符号和控制字符等。
机内码采用一个字节表示一个字符,每个字节的取值范围是0~127。
机内码的优点是编码简单,易于处理,因此在计算机内部得到广泛应用。
但其缺点也很明显,就是只支持英文字母等ASCII字符,不支持汉字和其他语言的字符。
三、区位码区位码是中国大陆地区常用的一种汉字编码体系,也称为GB码。
它是在1956年由中国科学院信息处理研究室提出的,是我国第一个汉字编码标准。
区位码采用一个字节表示一个汉字,其中第一个字节表示该汉字所在的区,第二个字节表示该汉字在该区的位置。
区号取值范围是0xA1~0xFE,共计94个区,每个区号包含了94个位置码,位置码取值范围也是0xA1~0xFE。
1.国标码:“国家标准信息交换用汉字编码”(GB2312-80标准),简称国标码。
国标码是二字节码, 用两个七位二进制数编码表示一个汉字。
2.区位码:为了使每一个汉字有一个全国统一的代码,区位码是国家规定的94*94的一个方阵,其中每行叫做一个区,每列叫做一个位,组合起来就组成了区位码,我们可以在相关网站查询某个汉字的区位码,例如汉字“我”的区位码是46 50 ,标识“我”在46区,50位。
3.机内码:机内码是在计算机中存储的汉子编码。
三者之间的关系。
国标码=16进制的区位码+2020H机内码=国标码+8080H例如“我”的的区位码是46 50 这是10进制的转化为16进制:2E32H所以“我”的国标码:2E32H+2020H=4E52H所以“我”机内码:4E52H+8080H=CED2(其实就是把二进制国标码的最高位置1,注意看E和2都没有变化)机内码转化为2进制就可以再计算机中存储,这里面转化为10进制可以输出。
CED2的10进制为:52946,这里我们打开记事本,按住alt建,输入52946即可以看见“我”,因为52946是“我”的机内码的10进制。
这里面有两个问题:1.为什么不用区位码直接表示国标码,为要加上2020H?2.机内码为什么要在国标码的基础上加上8080H,而不是直接只用国标码作为机内码?这里我先解决第二个问题,国标码就是由2个ASCII码组成,为什么呢(这里简单介绍一下,后面会详细说明)?因为在英文中只有26个字母,所以用一个字节就可以表示了,用一个字节的话可以表示2^8个符号,就是256个符号,绰绰有余啊,于是外国人制订了规范,规定0-127(00000000-01111111)个字符他们用了,用来表示英文字符和一些符号,就是ASCII码,但是汉字有很多,256个根本就不够,于是国家就用两个ASCII来表示一个汉字,就是2个字节标识一个汉字,例如“保”的区位码为:1703,所以国标码为:1703的10进制+2020H=3123H,然而:31H 和23H在ASCII中式有值的,31H在ASCII中表示数字1,23H表示的是“#”(这个可以在网上查询),那么如果我以国标码作为机内码的话,如果内存中有两个字节为31H和23H,那么到底是表示汉字“保”呢?还是字符1#呢?这样就有了歧义,但是解决办法就有了,0-127不是被英文字符占了吗?那么我就用127之后的来表示不就可以了吗?于是我把汉字的两个字节每个字节机上128(16进制就是80H),于是问题解决了,汉字“保”的机内码变为:3123H+8080H=B2A3H(10进制就是45475),打开记事本按住alt+45475看看是不是“保”,这样就不会和英文的ASCII冲突了。
Windows中区位码转换为机内码
步骤的简化
区位码的区和位分别加上32得到国标码, 再分别加上128得到机内码
区位码的区和位分别加上160得到机内码
区位码加上A0A0H = 机内码
⽰例: 我
我的区位码是4650
区位码 4650 = 46 50 = 2E 32H
国标码 2E32H + 2020H = 4E52H
机内码 4E52H + 8080H = 20050H + 32896H = 52946
说明
H表⽰⼗六进制
在windows中可以按下alt+机内码输⼊字符
2020H = 32 32: 由于GB2312对ASCII的32个控制字符进⾏保留, 所以将汉字编码向后偏移32位
8080H = 128 128: 为了兼容ASCII, 所以将最⾼位设为1, 也就是+ 100000000 = + 80
区位码: 根据GB2312-80标准, 国内所有的汉字或符号都有⼀个唯⼀的4位16进制的国标码和4位10进制的区位码; 其中前两位叫做区码, 后两位叫做位码国标码: GB1312的规范编码
机内码: 微软为了解决GB2312和ASCII兼容问题, 将最⾼位设为1⽽产⽣的编码。
国标码、机内码、区位码国家标准代码:国标码国家标准代码,简称国标码。
是中华人民共和国的中文常用汉字编码集,亦为新加坡采用。
国家标准强制标准冠以“GB”,推荐标准冠以“GB/T”,国标码是一个四位十六进制数。
现时中华人民共和国官方强制使用GB 18030标准,但较旧的计算机仍然使用GB 2312。
“GB”在计算机领域中常常表示GB 2312-80或GB 18030-2005。
两者是汉语编码系统的标准,在中国大陆和新加坡用于简体中文。
机内码:国标码是不可能在计算机内部直接采用的,于是,;汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128,即将两个字节的最高位由0改1,其余7位不变,如:由上面我们知道,“保”字的国标码为3123H,前字节为00110001B,后字节为00100011B,高位改1为10110001B和10100011B 即为B1A3H,因此,“保”字的机内码就是B1A3H。
区位码1980年,为了使每一个汉字有一个全国统一的代码,我国颁布了第一个汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。
区位码是一个四位的十进制数,每个区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。
ASCⅡ目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII 码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。
适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
简介因为1位二进制数可以表示(2^1)2种状态:0、1;而2位二进制数可以表示(2^2)4种状态:00、01、10、11;依次类推,7位二进制数可以表示(2^7)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。
汉字的国标码机内码区位码区别文字编码系列--汉字的国标码,机内码,区位码(gbcode查出的是区位码)1.国标码:“国家标准信息交换用汉字编码”(GB2312-80标准),简称国标码。
国标码是二字节码, 用两个七位二进制数编码表示一个汉字。
2.区位码:为了使每一个汉字有一个全国统一的代码,区位码是国家规定的94*94的一个方阵,其中每行叫做一个区,每列叫做一个位,组合起来就组成了区位码,我们可以在相关网站查询某个汉字的区位码,例如汉字“我”的区位码是46 50 ,标识“我”在46区,50位。
3.机内码:机内码是在计算机中存储的汉子编码。
三者之间的关系。
国标码=16进制的区位码+2020H机内码=国标码+8080H例如“我”的的区位码是46 50 这是10进制的转化为16进制:2E32H(46==2E,50==32)所以“我”的国标码:2E32H+2020H=4E52H所以“我”机内码:4E52H+8080H=CED2(其实就是把二进制国标码的最高位置1,注意看E和2都没有变化)机内码转化为2进制就可以再计算机中存储,这里面转化为10进制可以输出。
CED2的10进制为:52946,这里我们打开记事本,按住alt建,输入52946即可以看见“我”,因为52946是“我”的机内码的10进制。
这里面有两个问题:1.为什么不用区位码直接表示国标码,为要加上2020H?2.机内码为什么要在国标码的基础上加上8080H,而不是直接只用国标码作为机内码?这里我先解决第二个问题,国标码就是由2个ASCII码组成,为什么呢(这里简单介绍一下,后面会详细说明)?因为在英文中只有26个字母,所以用一个字节就可以表示了,用一个字节的话可以表示2^8个符号,就是256个符号,绰绰有余啊,于是外国人制订了规范,规定0-127(00000000-01111111)个字符他们用了,用来表示英文字符和一些符号,就是ASCII码,但是汉字有很多,256个根本就不够,于是国家就用两个ASCII来表示一个汉字,就是2个字节标识一个汉字,例如“保”的区位码为:1703,所以国标码为:1703的10进制+2020H=3123H,然而:31H 和23H在ASCII中式有值的,31H在ASCII中表示数字1,23H表示的是“#”(这个可以在网上查询),那么如果我以国标码作为机内码的话,如果内存中有两个字节为31H和23H,那么到底是表示汉字“保”呢?还是字符1#呢?这样就有了歧义,但是解决办法就有了,0-127不是被英文字符占了吗?那么我就用127之后的来表示不就可以了吗?于是我把汉字的两个字节每个字节机上128(16进制就是80H),于是问题解决了,汉字“保”的机内码变为:3123H+8080H=B2A3H(10进制就是45475),打开记事本按住alt+45475看看是不是“保”,这样就不会和英文的ASCII冲突了。