在本篇中,你将掌握
英文ASCII码与中文GB 2312-80字符串的存储方式英文在计算机里的表示方法就是ASCII码,键盘上的字母+数字+符号共128个字符只需要7个二进制(128个字符)编码即可。但为了存入计算机,通常在最高位补0,凑足1B(1Byte = 8 bit)。
上表即为ASCII码表,0-127,在表中可以发现: 可印刷字符:32~126,其余为控制、通信字符。
可印刷字符就是我们平时能打出来的字符;控制字符如127DEL,Delete删除字符,控制计算机执行某一种行为;通信字符,如6ACK,当两台计算机进行网络通信的时候,其中一台计算机收到另一台计算机发来的报文,需要回复一条ACK讯号。 可印刷字符起始终止数字48(0011 0000)57 (0011 1001)大写字母65(010 00001)90(010 11010)小写字母97(011 00001)122(011 11010)对于可印刷字符,值得注意的是: 在数字中,二进制编码的前四位均为0011,后四位为0000-1001的与之对应的8421编码; 在大写字母中,前三位均为010,后五位为00001-11010的 1-26 的二进制码; 在小写字母中,前三位均为011,后五位为00001-11010的 1-26 的二进制码。 且所有的数字、大写字母、小写字母的ASCII码值都是连续的
对于上述规律会有这样的问题 例:已知’A‘的ASCII码值为65,字符’H‘存放在某存储单元M中,求M中存放的内容。
答:该问题其实就是根据A的ASCII码推出H的ASCII码(二进制形式),A是第1个字母,H是第8个字母,因此H的码值 = 65 + 7 = 72,72再翻译成二进制就是100 1000,故M中存放的内容为0100 1000。第二种解法便是利用上述的大写字母规律,前三位均为010,后五位为00001-11010的二进制码。
对于英文字符和一些所需的符号,128个字符就足够英文的使用了,所以在计算机里保存英文只需要8bit(其实7bit就可以)。但对于中文来说,若算上生僻字等快7万多个字符。若要保存几万个字符,8bit显然是不够的,8bit最多只能对应256个字符。 因此,在1980年,我国推出了一个汉字编码标准 G B 2312 − 80 : 汉 字 + 各 种 符 号 共 7445 个 GB 2312-80:汉字+各种符号共7445个 GB2312−80:汉字+各种符号共7445个
为存储更多的字符,因此在最开始,使用了区位码的方式进行存储,即94行94列的区位表示,但用这种0-93 * 0-93的方法存储会与英文ASCII码中的控制、通信字符有冲突,因此+32(20H),即32-125 * 32-125的国标码;但为了避免和英文的ASCII码冲突,还需要在国标码基础上加上128(80H) ,从而得到汉字内码(汉字机内码)。一个汉字占两个字节,但汉字的任何一个字节都是大于128的。所以当计算机读入一个字节的数据是大于128的,就说明将读入的是由两个字节组成的汉字
输入:输入编码(如拼音,输入法) 输出:汉字字形码
输入编码会先变成国标码,再变成汉字内码;输出的汉字字形码就是用二进制表示的“手写数字识别版”的用1表示显示用0表示不显示的二进制数组(图片)。
对于英文字符的存储,如上图,依次存储对应字母的ASCII编码,且在结尾处加\0,即00H
对于中文字符的存储,如上图,因为存储中文字符需要两个字节,因此也就有了两种存储模式: 大端模式:将数据的最高有效字节存放在低地址单元中 小端模式:将数据的最高有效字节存放在高地址单元中
本篇重点,ASCII码的编码方式和规律,对于汉字编码了解即可,字符串的存储方式。