字符*为const wchar_t的*转换(char* to const wchar_t * con

2019-09-21 00:16发布

我需要字符指针转换为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返回一个字符指针

Answer 1:

什么类型getIpAddress()

下面是展示如何将转换片段stringwstring (使用标准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;
}


Answer 2:

你看着只有其他答案的一部分。 它继续与解释你需要做MultiByteToWideChar从8位字符串转换成16位的一个。



Answer 3:

这假定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语言环境更好。



文章来源: char* to const wchar_t * conversion