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 |
2.Window平台下LPSTR LPCSTR LPWSTR LPCWSTR區別
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定義,內容為單位元組的