Char&wchar

來源:互聯網
上載者:User

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定義,內容為單位元組的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.