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
来源:oschina
链接:https://my.oschina.net/u/3649283/blog/3013157