C++ 字符*到常量wchar\u t*的转换

C++ 字符*到常量wchar\u t*的转换,c++,pointers,char,wchar,C++,Pointers,Char,Wchar,我需要将字符指针转换为w_char*,以便使用ParseNetworkString()。我自己也尝试过找到解决方案,虽然我找到了一个解决方案,但有一个问题阻碍了我使用它: b1naryatr0phy在另一篇帖子中说: std::wstring name( L"Steve Nash" ); const wchar_t* szName = name.c_str(); 这几乎适用于我,除了我不能简单地传递字符串,因为它的值并不总是相同的,这意味着我不能把它放在引号中。如果我用函数调用替换参数,那么第

我需要将字符指针转换为w_char*,以便使用ParseNetworkString()。我自己也尝试过找到解决方案,虽然我找到了一个解决方案,但有一个问题阻碍了我使用它:

b1naryatr0phy在另一篇帖子中说:

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
这几乎适用于我,除了我不能简单地传递字符串,因为它的值并不总是相同的,这意味着我不能把它放在引号中。如果我用函数调用替换参数,那么第一行会给出一个错误(例如:std::wstring name(LgetIpAddress());我尝试了std::wstring name(L“”+getIpAddress()+);认为它只需要在L后面加一个引号,但这也不起作用。有什么建议吗

谢谢!:)

任何能回答这个问题的人都将获得额外的荣誉

链接到其他帖子:


另外,很抱歉,只是澄清一下,getIpAddress返回一个字符指针

您只看到了另一个答案的一部分。它继续解释您需要执行从8位字符串到16位字符串的转换。

getIpAddress()的类型是什么

下面是一个片段,演示如何将
字符串
转换为
wstring
(使用标准C++11,无错误检查):


这假设wchar\u t在您的平台上使用UTF-16(从您提到的ParseNetworkString()来看,我假定它是Windows)。它还假设char*使用UTF-8而不是传统编码,因为您实际上不应该使用传统编码,即使在Windows上也是如此

#include <codecvt>

int main() {
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> convert;

    std::wstring name = convert.from_bytes("Steve Nash");
    const wchar_t* szName = name.c_str();
}
#包括
int main(){
std::wstring_convert;
std::wstring name=convert.from_字节(“Steve Nash”);
const wchar_t*szName=name.c_str();
}

如果您使用的是传统编码,那么您应该通过完全转移到wchar_t API(假设您不关心可移植代码)或使用UTF-8作为内部字符*编码来解决这一问题。如果坚持使用传统编码,则需要使用处理转换这些编码的函数之一,例如
mbstowcs()
(这是区域设置敏感的,会带来大量新问题),或者使用
MultiByteToWideChar()它有一些类似的问题,但与Windows区域比较好。

如果GETIpAdvsServer()返回WString或WCARGURT*,那么您只需要在GeIpAdAdSers[]之前删除L,就我所知,C++标准不授予STD::String和STD::WString元素被安排在连续内存块中。因此,最好用std::vector替换std::wstring,用str替换&str[0]。c_str()在Visual Studio 2015中不适用于我:请参阅
#include <codecvt>

int main() {
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> convert;

    std::wstring name = convert.from_bytes("Steve Nash");
    const wchar_t* szName = name.c_str();
}