小兔网

C语言中的字符串是以ASCII码表的形式存入的,输入英文字符是以英文字符对应的ASCII码的形式进入寄存器中的,例如输出hello world!:

#include<stdio.h>
int main()
{
char str[]="hello world!";
printf("%s\n",str);
return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

将c反汇编得到,
202102010222 1
202102010222 2
可以看到h的ASCII码是68,e的ASCII码是65等等存放进内存的,那中文字呢?中文字并没有对应的ASCII码,还可以显示出来吗?
202102010222 3
答案当然是肯定的,在计算机中存储中文使用的编码规则是GB2312或GB2312-80,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,连在ASCII里本来就有的数字、标点、字母都通通重新编了两个字节长的编码,这就是常说的“全角”字符,而原来在127号以下的那些就叫“半角”字符。
将代码反汇编看看,
202102010222 4
这就是中文的存储方法。
但这样的话也是有弊端的,我们国家GB2312里的符号的意义可能和别的国家的不一样,即两国使用相同的数字代表不同的符号,于是Unicode出现了,我就不说明Unicode的编码方式了。