字符和字符串
在c/c++中,字符编码的格式分两种:ASCII和Unicode。
ASCII编码在内存中占一个字节大小,由0~255之间的数字组成。Unicode占2字节,表示范围0~65535。
在vc++6.0中,使用char表示ASCII字符,wchar_t表示Unicode字符。wchar_t中保存ASCII时,不足位补0,如字符'a'的ASCII编码为0x61,Unicode编码为0x0061,汉字的编码方式有些特殊,ASCII和Unicode都有与之匹配的编码格式。
在程序中使用中文,韩文,日文等时,经常出现乱码,这是因为系统中缺少程序中所需的语种的字符表,而这个字符表是用来解释所需语种的字符编码的。
ASCII使用GB2312-80,又叫汉字国际码,保存了6763个常用汉字编码,用两个字节表示一个汉字,在GB2312-80中用区和位来定位,第一个字符保存每个区,共94个区,第二个字节保存每个区中的位,共94位。
Unicode使用UCS-2编码格式,最多可存储65536个字符。但是汉字博大精深,总数远超过UCS-2存储范围,所以UCS-2编码格式只保存了常用字,为了将所有的汉字都包含进来,Unicode也采用了与ASCII类似的方式——用2个Unicode编码解释一个汉字,称之为UCS-4编码格式。
UCS-2编码表的使用和ASCII码表的使用是一样的,每个数字编号在表中对应一个汉字,从0x4E00到0x9520为汉字编码区,为了使char和wchar_t通用,使用了预编译宏TCHAR来代替他们,TCHAR会根据编译选项定义对应的字符类型。