前言
N:代表near,在16位系统中代表16位的段内地址L:代表long(far),在16位系统中代表16位的段地址+16位的偏移地址在32位系统中 N和L已经没有作用,只是为了向前兼容(兼容16位机器)才保留这些定义。P:代表指针C:代表CONST(const)W:代表WCHAR(wchar_t)T:代表宏_T(一个兼容的宏,当定义了UNICODE或者_UNICODE是表示WCHAR,否则表示char)CH:char的简写STR:string的简写BSTR:是一个OLECHAR*类型的Unicode字符串,是一个COM字符串
_T():
函数详解 _T(“”)是一个宏,他的作用是让你的程序支持 Unicode 编码 因为 Windows 使用两种字符集 ANSI 和 UNICODE, 前者就是通常使用的单字节方式, 但这种方式处理象中文这样的双字节字符不方便, 容易出现半个汉字的情况。 而后者是双字节方式,方便处理双字节字符。 Windows NT 的所有与字符有关的函数都提供两种方式的版本,而 Windows 9x 只支持 ANSI 方式。 如果你编译一个程序为 ANSI 方式, _T 实际不起任何作用。 而如果编译一个程序为 UNICODE 方式,则编译器会把”Hello”字符串以 UNICODE 方式保存。_T 和_L 的 区别在于,_L 不管你是以什么方式编译,一律以 UNICODE 方式保存。
LPSTR:
32-bit LPSTR 是一个指向以'\0'结尾的 ANSI 字符数组的指针,每个字符占 1 字节 ,与 char*可以 互换使用,在 win32 中较多地使用 LPSTR。LPSTR = char ,(typedef char LPSTR)
LPCSTR:
32-bit 指针指向一个指向以NULL('\0')结尾的ANSI常量字符串,每个字符占 1 字节 ,LPCSTR 中增加的‘C’的含义是“CONSTANT” (常量) ,表明这种数据类型的实例不能被使用它的 API 函数改变,除此之外,它与 LPSTR 是等同的。
PWSTR:
指向Unicode字符串的指针,每个字符占 2 字节。
PCWSTR:
指向一个恒定的Unicode字符串的指针,每个字符占 2 字节。
LPTSTR:
32-bit 指针每字符可能占 1 字节或 2 字节,取决于 Unicode 是否定义 L 是表示字符串资源为 Unicode 的。
LPCTSTR:
32-bit 指针指向一个常量字符串,每字符可能占 1 字节或 2 字节,取决于 Unicode 是否定义。如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串
相互转换方法:
LPWSTR<->LPTSTR
LPWSTR->LPTSTR: W2T();
LPTSTR->LPWSTR: T2W();
LPCWSTR<->LPCSTR
LPCWSTR->LPCSTR: W2CT();
LPCSTR->LPCWSTR: T2CW();
ANSI<->UNICODE:
ANSI->UNICODE: A2W();
UNICODE->ANSI: W2A();
ATL::CString 转 QString
ATL::CString cstr = L"dddd";string strTest = CT2A(cstr .GetString());showInfo(QString::fromStdString(strTest));
QString<->PCWSTR
QString qstr = "qstr";PCWSTR pcwstr = qstr .toStdWString().c_str();
CString<->string
CString cstrTest = _T("test");
string strTest;
strTest= CT2A(cstrTest.GetString());string strTest="test";
CString cstrTest;
cstrTest= CA2T(strTest.c_str());
CString cstrTest = _T("test");
string strTest;
string = CA2A(cstrTest.GetString());string strTest="test";
CString cstrTest;
cstrTest= CA2A(strTest.c_str());
参考文章
- 关于char, wchar_t, TCHAR, _T,L,TEXT,_TEXT,LPSTR,LPCSTR,PWSTR,PCWSTR,LPTSTR,LPCTSTR的区别_TeaIsCold的博客-CSDN博客
https://blog.csdn.net/teaiscold/article/details/78278396 - ATL字符串转换宏_yunshouhu的博客-CSDN博客
https://blog.csdn.net/earbao/article/details/11696929 - ATL 和 MFC 字符串转换宏 | 微软文档
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/87zae4a3(v=vs.100)?redirectedfrom=MSDN - CString 与 string 间的转换_沙漏99的博客-CSDN博客_cstring string 转换
https://blog.csdn.net/jaken99/article/details/103180203