含义
- 其实就是编码问题
- A:
- 代表ANSI
- W:
- 代表宽字节(wide),即 Unicode
- A:
- 一般win的库函数如果后面不加 ’A‘ 或 'W' 时,直接给它传字符串类型值时会报错:
- 以我常用的 ShellExecute() 为例:
- 会报错:
- "const char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
- 不存在从 “std::string” 到 “LPCWSTR” 的适当转换函数
- LPCWSTR 是个啥?让我们来看看它的定义:
- typedef const wchar_t* LPCWSTR;
- 即指向unicode编码字符串的32位指针,并且所指向字符串是wchar,而非char。
- 解决方法:
- 把函数改为 ShellExecuteA() 或 ShellExecuteW()
- 或者在传字符串时使用宏定义转换类型
- 对于常量字符串:
- _T() (推荐使用)自适应转换,当程序定义为unicode时,相当于L,当程序定义为ansi时,则被忽略(头文件:#include <tchar.h>)
- L ;例如原本传值为 fun("open"),使用后为fun(L"open");注意这个L并没有括号。
- CA2W() 从宽字符集(Unicode)转为多字符集(ANSI)(头文件:#include <atlstr.h>)
- CW2A() 从多字符集(ANSI)转化为宽字符集(Unicode)(头文件:#include <atlstr.h>)
- 对于string / char[] / const char[] :
- 使用以下函数
LPCWSTR stringToLPCWSTR(const std::string& orig)
{
size_t origsize = orig.length() + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
wchar_t *wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(orig.length()-1));
mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
return wcstring;
}
- -
- -
- 那么如果我是 char[] 或者 const char[] 呢?那当然是转string再使用上面的函数啦。
- 示例:
- -
ShellExecuteA(NULL, "open", "https://blog.coolight.cool/", NULL, NULL, SW_SHOWNORMAL);
string str = "https://blog.coolight.cool/";
ShellExecute(NULL, _T("open"), stringToLPCWSTR(str), NULL, NULL, SW_SHOWNORMAL);
const char link_char[] = "https://blog.coolight.cool/";
ShellExecute(NULL, _T("open"), stringToLPCWSTR(string(link_char)), NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, L"open", CA2W("https://blog.coolight.cool/"), NULL, NULL, SW_SHOWNORMAL);
常见编码格式
见另一篇文章:常见编码格式 / 字节序(大端 / 小端)/ 带BOM
I always find myself nodding along and agreeing with your wise words Your insights and advice are truly valuable
вывод. из. запоя. ростов. на. дону. familyportal.forumrom.com/viewtopic.php?id=28563 .
вывод из запоя ростовская область severussnape.borda.ru/?1-4-0-00000315-000-0-0-1730725155 .
вывод из запоя цены на дому ростов https://zavitai.mybb.social/viewtopic.php?id=88 .
нарколог на дом вывод из запоя на дому нарколог на дом вывод из запоя на дому .
вывод из запоя на дому https://vkontakte.forum.cool/viewtopic.php?id=19611 .
нарколог вывод из запоя ростов нарколог вывод из запоя ростов .
вывод из запоя цена ростов severussnape.borda.ru/?1-4-0-00000315-000-0-0-1730725155 .
вывод из запоя дешево ростов на дону https://www.zavitai.mybb.social/viewtopic.php?id=88 .
вывод из запоя в ростове http://www.chesskomi.borda.ru/?1-8-0-00003044-000-0-0-1730725479/ .
анонимный. вывод. из. запоя. ростов. automobilist.forum24.ru/?1-19-0-00000137-000-0-0-1730725245 .
Тут можно преобрести сейф несгораемый купить огнестойкие сейфы купить
вывод из запоя в ростове на дону http://www.chesskomi.borda.ru/?1-8-0-00003044-000-0-0-1730725479 .
вывод из запоя дешево ростов http://odessaforum.0pk.me/viewtopic.php?id=10053/ .
вывод из запоя на дому ростов http://www.familyportal.forumrom.com/viewtopic.php?id=28563 .
вывод из запоя на дому ростов ya.7bb.ru/viewtopic.php?id=14600 .