先直接上结论
首先我门要把 区位码(十进制)D 转化为 区位码(十六进制)H 下面的区位码默认为十六进制
国标码=区位码+20 20 H
机内码=国标码+80 80 H
机内码=区位码+80 80 H
判断西文字符和中文字符的方式
西文字符<80H
中文字符>A0 A0H
如果要深入了解机制还要从最开的西文字符——ASCII码说起
1.西文字符——ASCII
(1)128个字符集(8*16),32个控制字符,96个可打印
(2)7位编码,每个占 1字节
(3)常用的ASCII
——数字类0~9:“0”——30H(48)
——大写字母A~Z :“A”——41H(65)
——小写字母a~z :“a”——61H(97)
通过观察我们可以看到前两排为控制符 即 控制字符与可打印字符 相差20H
2.中文字符——GB2312
(1) GB,国标 GB2312 是国家在1980年提出的标准 ,其中6763个简体汉字和682个简体符号。整个字符集可以看作一个94X94的列表,通过区号和位号来表示某个字。
(2)区位号=区号+位号 为了可读性,区位码多以十进制表示
中文的字符一般占 2字节
(3)为了和ASCII码区别,区号和位号的最高位都为1
在计算机打印字符时
最早GB2312是决定把ASCII的字符部分覆盖,只保留不可打印的控制字符,因此在区位码转换为国标码需要加 20 20H (即ASCII表相差的两行)即 国标码=区位码+20 20 H
但是在这样做读取某些由ASCII 文章时出现了乱码,于是干脆就在ASCII的基础上 第一位变为1
即 机内码=国标码+80 80 H
参考GB2312区位码转机内码为什么要同时加上2020H和8080H? - 知乎