我需要字符指针转换为w_char *为了使用ParseNetworkString()。 我试图寻找解决此我自己,虽然我已经找到一个解决方案,有一个问题,它使用它的块我:
b1naryatr0phy在其他文章中说:
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
这几乎是对我的作品,但我不能只把这个字符串显式,因为它的价值并不总是将是相同的,这意味着我不能只把它放在引号。 如果我更换一个函数调用的参数,那么第一行给我一个错误(例如:性病:: wstring的名称(LgetIpAddress());我试过的std :: wstring的名称(L”“+ getIpAddress()+ ““);,以为它只是需要将L后引号,但是,这并不工作,要么..任何建议吗?
谢谢! :)
额外的荣誉给谁可以回答这个问题!
链接到其他岗位: 我要的std :: string转换为常量为wchar_t *
PS不好意思,我只想澄清,getIpAddress返回一个字符指针
什么类型getIpAddress()
下面是展示如何将转换片段string
到wstring
(使用标准C ++ 11,没有错误检查):
wstring to_wstring(string const& str)
{
size_t len = mbstowcs(nullptr, &str[0], 0);
if (len == -1) // invalid source str, throw
wstring wstr(len, 0);
mbstowcs(&wstr[0], &str[0], wstr.size());
return wstr;
}
你看着只有其他答案的一部分。 它继续与解释你需要做MultiByteToWideChar
从8位字符串转换成16位的一个。
这假定wchar_t的使用UTF-16的平台上(我假定是Windows中,通过ParseNetworkString提及())。 它还假定的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();
}
如果您使用的是旧版的编码,那么你应该解决这个问题,通过移动到wchar_t的完全的API(假设你不关心移植的代码)或使用UTF-8作为内部的char *编码。 如果你坚持使用传统的编码,那么你就需要使用的功能之一,处理将它们转换,如mbstowcs()
这是语言环境敏感,这带来了新的问题一大堆),或使用MultiByteToWideChar()
其中有一些类似的问题,但目与Windows语言环境更好。