VS中編碼表的Unicode和多位元組編碼表的區別

VS中編碼表的Unicode和多位元組編碼表的用處,注意是 用處
所以不贅述具體編碼方式。網上一大片。

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

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

1

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。

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

2

在Win32API中,其引數大多形如LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR等。

它們是Win32和VC++所使用的一種字串資料型態。其實
LP:指標
C:const
W:wide寬字元
T:表示在Win32環境中, 有一個_T巨集,通用
STR:表示這個變數是一個字串

因為受編碼表的影響,所以需要區分是否使用寬字元,因此使用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