http://hi.baidu.com/zeficie/blog/item/219a1550b3a50a5b1038c2d1.html
摘自---考拉的空间
1.C语言相关
对应于char , C语言中也有宽字符内型wchar_t 。wchar_t被定义为: typedef unsigned short wchar_t ; 显然它是16位的。wchar_t类型的常字串应该这样写: L"hello" 。因此可以这样定义一个宽字符指针 wchar_t *pwc=L"hello"; 。
对于字符串函数, C语言中也有两个版本。如对应于strlen 有wcslen ,wprintf 是printf 的宽字符版。当然这两个版本的函数使用各自类型的参数,原因是显然的,char和unsigned short 怎么能等同呢?编译器是不会放过你的。
下表是对char,wchar_t相关内容的比较:
(测试环境:VC++6.0) | char类型 | wchar_t类型 |
类型大小(32位系统) | 8位 | 16位 |
常量字符表示法 | 'A' | L'A' 或 'A' |
常量字符串表示法 | 'hello' | L'hello' |
一些使用方法 | char c='A'; (c的值:0x41) | wchar_t wc='A'; (wc的值:0x0041) |
char* p='hello'; | wchar_t* pw=L"hello"; | |
sizeof | sizeof("hello")=6 | sizeof(L"hello")=12 |
计算长度 | strlen("hello")=5 | wcslen(L"hello)=5 |
LPSTR 一个32位的指向字符串的指针
LPCSTR 一个32位的指向字符串常量的指针
LPWSTR 一个32位的指向unicode字符串的指针
LPCWSTR 个32位的指向unicode字符串常量的指针
前面的L代表LONG,P就是指针的意思,C就是constant的意思
W是wide的意思,STR就是string的意思
LPSTR = char *
LPCSTR = const char *
LPWSTR = wchar_t *
LPCWSTR = const wchar_t *
LPOLESTR = OLECHAR * = BSTR = LPWSTR(Win32)
LPCOLESTR = const OLECHAR * = LPCWSTR(Win32)
LPTSTR = _TCHAR *
LPCTSTR = const _TCHAR *
3.L是表示字符串资源为Unicode的。
比如
wchar_t Str[] = L"Hello World!";
这个就是双子节存储字符了。
_T是一个适配的宏~
当#ifdef _UNICODE的时候_T就是L
没有#ifdef _UNICODE的时候_T就是ANSI的。
比如 LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T("Hello");
以上两句使得无论是在UNICODE编译条件下都是正确编译的。
char是普通的单字节字符。
宏_TCHAR ,_T的作用一样(分别针对变量与常量字符串):
如果系统有UNICODE定义,内容为双字节的。
如果无UNICODE定义,内容为单字节的