GB2312编码(加2020H、8080H原理)

区位码、内码、国标码 转换及原理

背景

问题: 某汉字的国标码为5650H,那么它的机内码为( B )。

A E6E0H
B D6D0H
C C6C0H
D 8080H

答题

在这里插入图片描述

思考

为什么要加上2020H和8080H?区位码、内码、国标码怎么转换非常简单,原因是什么?

  • GB2312是中文编码,但是里面有对 26个英文字母和一些特殊符号的编码,按理说这和ASCII重合的部分应该无需设置,沿用ASCII中不就行了?但是当时在制定GB2312之前,就决定覆盖掉ASCII中符号和英文字母部分,所以将其中的英文字母和符号重新编入GB2312中。而对于ASCII中前32个控制字符则继续沿用。所以保留前32字符,将汉字编码向后偏移32,十六进制20H,这也就是区位码要加上20H得到国标码,这就是GB2312的编码规范。
  • 而这样产生一个弊端,某些早期用ASCII码编码的英文文章无法打开,一打开就是乱码,也就是说应该要兼容早期ASCII码而不是覆盖它!为了解决这个问题,将字节的最高位设为1,因为**ASCII中使用7位,最高位为0。这样就区分开了ASCII和GB2312**。这也是为什么要加上8080H。 其实我们说国标码才是GB2312的规范编码,后来的内码是微软为了解决冲突问题而采用的方式,本质上是修改了GB2312的编码标准,而这种方法最后产生的编码最后就被一些教科书称为内码
  • 个人理解:
    • 2020H: 相当于ASCII中 前32字符, 32换算16进制 就是20H
    • 8080H: 相当于ASCII中 128个字符,128换算16进制就是 80H
    • 最终:
      • 机内码 = 国标码 + 8080H
      • 机内码 = 区位码 + A0A0H
      • 国标码 = 区位码 + 2020H

相关资料

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值