繁体   English   中英

char *到const wchar_t *转换

[英]char* to const wchar_t * conversion

我需要将字符指针转换为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之后加一个引号,但这也不起作用......任何建议?

谢谢! :)

对任何能够回答这个问题的人都有额外的荣誉!

链接到其他帖子: 我想将std :: string转换为const 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语言环境更好地网格化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM