char* to const wchar_t * conversion
我需要将字符指针转换为 w_char * 才能使用 ParseNetworkString()。我自己尝试过寻找解决方案,虽然我找到了一种解决方案,但有一个问题阻止了我使用它:
b1naryatr0phy 在另一篇文章中说:
1 2 | 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 *
附言抱歉,为了澄清,getIpAddress 返回一个字符指针
这是一个片段,展示了如何将
1 2 3 4 5 6 7 8 | 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; } |
这假设 wchar_t 在您的平台上使用 UTF-16(我假设是 Windows,从您提到的 ParseNetworkString())。它还假设 char* 使用 UTF-8 而不是传统编码,因为您真的不应该使用传统编码,即使在 Windows 上也是如此。
1 2 3 4 5 6 7 8 | #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* 编码来解决这个问题。如果您坚持使用遗留编码,那么您将需要使用处理转换它们的函数之一,例如
您只查看了其他答案的一部分。它继续解释您需要执行