http://hi.baidu.com/triangelfj/blog/item/d7af75167cd7d94f21a4e92b.html
http://blog.csdn.net/dongyonghui_1017/archive/2009/06/18/4280205.aspx
http://blog.programfan.com/article.asp?id=34551 http://blog.programfan.com/article.asp?id=34552 一.ANSI和UNICODE 2.ANSI字符和Unicode字符 对应的Windows定义的Unicode字符类型为WCHAR(typedef WCHAR wchar_t) ,指向Unicode字符串的指针PWSTR ,指向一个常数Unicode字符串的指针PCWSTR 。 ANSI “ANSI” 3.ANSI字符和Unicode字符串的操作 双字节(DBCS)字符集中,字符串的每个字符可以包含一个或两个字节。如果只是调用strlen()函数,那么你就无法知道字符串到底有多少个字符,它只能告诉你到达结尾的0之前有多少个字节。 标准c中的strcpy,strchr,strcat等只能用于ANSI字符串,不能正确处理Unicode字符串,因此也提供了一组补充函数,功能等价,但用于Unicode码。我们来看看string .h字符串头文件中是怎样处理char*和wchar_t*两个字符串版本的: 二.ANSI/UNICODE通用字符/字符串类型TCHAR/LPTSTR/LPCTSTR Neutral ANSI/UNICODE types 1.通用字符型TCHAR TCHAR ifdef UNICODE it is wchar_t(WCHAR)for Unicode platforms; else it is char for ANSI and DBCS platforms. 2.通用字符串指针LPTSTR LPTSTR ifdef UNICODE it is LPWSTR(*wchar_t) for Unicode platforms; else it is LPSTR (*char) for ANSI and DBCS platforms. 3.通用通用常数字符串指针LPCTSTR LPCTSTR ifdef UNICODE it is LPCWSTR(*const wchar_t) for Unicode platforms; else it is LPCSTR (*const char)for ANSI and DBCS platforms. typedef LPWSTR LP; #define __TEXT(quote) L##quote // r_winnt <1>_UNICODE宏用于C运行期头文件,UNICODE宏则用于Windows头文件,当编译代码模块时,通常必须同时定义这两个宏。 <2>如果定义了_UNICODE,若要生成一个Unicode字符串,字符串前要加L宏,用于告诉编译器该字符串应该作为Unicode字符串来编译处理。但是这样又有个问题就是如果没有定义_UNICODE则编译出错。为了解决这个问题我们必须用到_TEXT宏,这个宏也在TChar.h中做了定义。使用该宏后,无论源文件有没有定义_UNICODE都不会出现编译错误。 <3>Unicode与ANSI字符串的转换:Windows函数MultiByteToWideChar函数用于将多字节字符串转换成宽字符串,函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。
有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里: 2, ANSI与Unicode
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dongyonghui_1017/archive/2009/06/18/4280205.aspx
|