汉字区位码转换为“汉字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)汉字编码对照表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

konoakuada

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值