VS中字符集的Unicode和多字節字符集的區別

VS中字符集的Unicode和多字節字符集的用處,注意是 用處
因此不贅述具體編碼方式。網上一大片。ide

ANSI編碼(使用""包裹)
Unicode編碼(使用L""包裹)函數

----------------------------------------------------------------------------------------------------------------編碼

1.net

Winodows API有兩種,一種W結尾,一種A結尾。
W結尾API,對應Unicode字符集。
A結尾API,對應ANSI多字節字符集。指針

1.VS新建工程,在主函數裏隨便輸入個Win32API,例如「CreateProcess()」
2.設置字符集爲多字節字符集
3.F12查看「CreateProcess()」函數定義,以下:
#ifdef UNICODE
#define CreateProcess  CreateProcessW
#else
#define CreateProcess  CreateProcessA
#endif // !UNICODE
//CreateProcessA會高亮,表示ANSI版本
//「CreateProcess()」所映射到的函數會根據所設置的字符集自動選擇,固然,也能夠手動選擇使用哪一個版本的函數。
4.設置爲Unicode字符集,CreateProcessW()會變爲高亮,表示使用寬字符版本,他們所使用的參數有所區別,W版本必須使用寬字符,如wchar_t、std::wstring。code

----------------------------------------------------------------------------------------------------------------blog

2unicode

在Win32API中,其參數大多形如LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR等。字符串

它們是Win32和VC++所使用的一種字符串數據類型。其實
LP:指針
C:const
W:wide寬字符
T:表示在Win32環境中, 有一個_T宏,通用
STR:表示這個變量是一個字符串get

由於受字符集的影響,因此須要區分是否使用寬字符,所以使用T宏來自動推斷使用哪種類型。

常量字符串ansi和unicode的區分是由宏_T來決定的。可是用_T("abcd")時, 字符串"abcd"就會根據編譯時的是否認一_UNICODE來決定是char* 仍是 w_char*。

----------------------------------------------------------------------------------------------------------------

3

LPCTSTR
#ifdef UNICODE
#define LPCTSTR LPCWSTR
#else
#define LPCTSTR LPCSTR
#endif

TCHAR
當沒有定義_UNICODE宏時,TCHAR = char,_tcslen =strlen
當定義了_UNICODE宏時,TCHAR = wchar_t , _tcslen = wcslen
當咱們定義了UNICODE宏,就至關於告訴了編譯器:我準備採用UNICODE版本。這個時候,TCHAR就會搖身一變,變成了wchar_t。

----------------------------------------------------------------------------------------------------------------

4

參考:

https://bbs.csdn.net/topics/70298966
https://blog.csdn.net/stephen1315/article/details/7476236
https://baike.baidu.com/item/TCHAR/1865865?fr=aladdin
https://blog.csdn.net/w343051232/article/details/7083276

相關文章
相關標籤/搜索