汉字区位码转换为“汉字ASCII码“

  **仅供个人学习使用,如有问题欢迎提出**

每个汉字及符号都有一个区位码,即每个汉字有一个区号(两位十进制)和一个位号(两位十进制)。一共分了94个区,每个区中有94个汉字。
并且也有与其相对应的“汉字ASCII码”,也称汉字机内码,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。输入码被接受后就由汉字操作系统的“输入码转换模块”转换为机内码,与所采用的键盘输入法无关。机内码是汉字最基本的编码,不管是什么汉字系统和汉字输入方法,输入的汉字外码到机器内部都要转换成机内码,才能被存储和进行各种处理。
其中转换过程如下: 从键盘输入一个汉字外码,转换模块会获得其区位码,如“啊”的区号为16,位号为1,然后会将其转换为国际码汉字的国标码可以在区位码基础上换算得到:国标码=(区位码的十六进制表示)+2020H(十六进制数后加H以用于辨识) 以“啊”为例:
区位码 00010000 00000001
+2020H 00100000 00100000
国际码 0011 0000 00100001
得到“啊”的国标码为:3021H 随后还要便要将国际码转换危机内码进行存储,机内码和国标码的转换规则是:机内码 = 国标码+8080H =(区位码的十六进制表示)+A0A0H。显然,就是将国标码的两个字节的最高位均置为1。
国际码 00110000 00100001
+8080H 00110000 00100000
机内码 10110000 10100001
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1,机内码也不例外,并且负数在内存中是以补码的方式存储的,很明显“啊”的机内码表示一个负数,现在将其转换为原码:11010000 1101111,再两个十六进制数转换成十进制,分别是 -80 -95,也就是“啊“所对应的”汉字ASCII码 “ ,可以使用字符数组来进行验证

          int main()
{
char c[2];
c[0]=-80;
c[1]=-95;
printf("c=%c",c);
return 0;

具体国标(GB2312-80)汉字编码对照表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值