我在为公司编写打印机程序时,遇到了一个字符串传参时格式的问题,看了这个人的博客,解决了问题,现在转载过来:http://blog.csdn.net/lihao21
我们熟悉的ASCII码全称是美国国家信息交换标准码,它起源于20世纪50年代末,并于1967年最终定型。ASCIIS码使用7位(bit)的宽度,有26个小写字母,26个大写字母,10个数字,32个符号,33个控制码,一个空格码,共128个代码。 ASCII的使用相当普及,是一种非常可靠的标准。但是,ASCII是一个美国的标准,它甚至满足不了其他英语国家的需求,例如,ASCII码并没有英镑符号。 我们知道,一些语言文字系统(例如中国的汉字)的字符集有非常多的符号,但一个字节最多只能表示256个符号,这是远远不够的。为了支持这些文字系统,双字节字符集(doube-byte character set, DBCS)应运而生。在双字节字符集中,一个字符由1个或2个字节组成。对程序员来说,和双字节字符集打交道就如同一场噩梦,因为程序员需要判断每个字节是否双字节的前导字节。 Unicode是1988年由Apple与Xerox共同建立的一项标准。与DBCS的混乱不同,Unicode统一使用16位进行编码,即UTF-16编码。UTF的全称是Unicode Transformation Format(Unicode转换格式)。UTF-16将每个字符编码为2个字节(16位)。这样一来,程序员在处理这种格式的编码时,就显得相对简单。 除了UTF-16编码,还有其他用于表示字符的UTF标准。UTF-8UTF-8将一些字符编码为1个字节,一些字符编码为2个字节,一些字符编码为3个字节,一些字符编码为4个字节。值在0x0080以下的字符压缩为1个字节,这对美国使用的字符非常适合。0x0080和0x07ff之间的字符转换为2个字节,这对欧洲和中东地区的语言非常适合。0x0800以上的字符都转换为3个字节,适合东亚地区的语言。使用代理对(surrogate pair)转换为4个字节。UTF-8是一种非常流行的编码格式。UTF-32UTF-32将所有的字符都编码为4个字节。从使用的角度来看,由于所有字符的字节数一定,所以处理起来较为简单。但从内存使用的角度来看,UTF-32并不是一种高效的编码方式。因此,在网络传输等场合,很少会使用UTF-32这种编码格式。UTF-32一般在应用程序内部使用。 在谈到Unicode时,除非特别声明,我们一般是指UTF-16编码。
在写代码的时候,可以使用ANSI 或Unicode字符/字符串。为使其能通过编译,windows定义了以下的类型的宏:
[cpp] view plain copy#ifdef UNICODE typedef WCHAR TCHAR, *PTCHAR, PTSTR; typedef CONST WCHAR *PCTSTR; #define __TEXT(quote) L##quote #else typedef CHAR TCHAR, *PTCHAR, PTSTR; typedef CONST CHAR *PCTSTR; #define __TEXT(quote) quote #endif #define TEXT(quote) __TEXT(quote) 利用这些类型和宏,无论使用ANSI还是Unicode,都可以通过编译。[cpp] view plain copy// 若定义了UNICODE,则作用16位的字符,否则使用8位的字符 TCHAR C = TEXT('A'); // 若定义了UNICODE,则作用16位的字符串,否则使用8位的字符串 TCHAR szBuffer[100] = TEXT("A String");新闻热点
疑难解答