首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++将字符串(或字符*)转换为wstring (或wchar_t*)

C++将字符串(或字符*)转换为wstring (或wchar_t*)
EN

Stack Overflow用户
提问于 2010-04-04 15:35:01
回答 15查看 329.1K关注 0票数 202
代码语言:javascript
复制
string s = "おはよう";
wstring ws = FUNCTION(s, ws);

如何将%s的内容分配给% ws?

搜索了谷歌,并使用了一些技术,但他们无法分配确切的内容。内容被扭曲了。

EN

回答 15

Stack Overflow用户

发布于 2012-01-23 17:54:13

代码语言:javascript
复制
int StringToWString(std::wstring &ws, const std::string &s)
{
    std::wstring wsTmp(s.begin(), s.end());

    ws = wsTmp;

    return 0;
}
票数 61
EN

Stack Overflow用户

发布于 2010-04-04 15:42:29

你的问题说得太少了。严格地说,该示例是一个语法错误。但是,mbstowcs可能就是您要找的。

它是一个C库函数,在缓冲区上操作,但这里有一个易于使用的习惯用法,由Mooing Duck提供:

代码语言:javascript
复制
std::wstring ws(s.size(), L' '); // Overestimate number of code points.
ws.resize(::mbstowcs_s(&ws[0], ws.size(), s.c_str(), s.size())); // Shrink to fit.
票数 37
EN

Stack Overflow用户

发布于 2014-11-14 01:14:28

仅Windows应用程序接口,在C++11实现之前,以防有人需要它:

代码语言:javascript
复制
#include <stdexcept>
#include <vector>
#include <windows.h>

using std::runtime_error;
using std::string;
using std::vector;
using std::wstring;

wstring utf8toUtf16(const string & str)
{
   if (str.empty())
      return wstring();

   size_t charsNeeded = ::MultiByteToWideChar(CP_UTF8, 0, 
      str.data(), (int)str.size(), NULL, 0);
   if (charsNeeded == 0)
      throw runtime_error("Failed converting UTF-8 string to UTF-16");

   vector<wchar_t> buffer(charsNeeded);
   int charsConverted = ::MultiByteToWideChar(CP_UTF8, 0, 
      str.data(), (int)str.size(), &buffer[0], buffer.size());
   if (charsConverted == 0)
      throw runtime_error("Failed converting UTF-8 string to UTF-16");

   return wstring(&buffer[0], charsConverted);
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2573834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档