方法一:需要调用windows的api函数进行转换,在vs2017上试验转换成功

#ifdef _MSC_VER
#include <Windows.h>
#endif // _MSC_VER
wstring strToStdWString(const string& str)
{
wstring wStr;
int len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)str.c_str(), str.size(), NULL, 0);
TCHAR* buffer = new TCHAR[len + 1];
MultiByteToWideChar(CP_ACP, 0,(LPCSTR)str.c_str(), str.size(), buffer, len);
buffer[len] = '\0';
wStr.append(buffer);
return wStr;
}

  

方法二:该方法经过测试输出错误,并不能完成中文字符的转换

1 wstring strToStdWString2(const string& str)
2 {
3 wstring wstr(str.length(), L' ');
4 std::copy(str.begin(), str.end(), wstr.begin());
5 return wstr;
6 }

方法三:该调用了locale头文件,与平台无关

#include <locale.h>
wstring strToStdWString3(const string& s)
{
std::string curLocale = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "chs");
const char* _Source = s.c_str();
size_t _Dsize = s.size() + 1;
wchar_t* _Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
size_t convertedChars = 0;
mbstowcs_s(&convertedChars, _Dest,_Dsize, _Source, _TRUNCATE);
std::wstring ws = _Dest;
delete[] _Dest;
setlocale(LC_ALL, curLocale.c_str());
return ws;
}

方法4:采用ATL封装_bstr_t的过渡,在vs2017上测试失败,链接错误,并无移植性

#include <comutil.h>
#pragma comment(lib, "comsuppw.lib")
wstring strToWString4(const string& str)
{
_bstr_t t= str.c_str();
wchar_t* pwchar = (wchar_t*)t;
wstring ws = pwchar;
return ws;
}

总结:使用方法一和方法三都能实现string向wstring的转换,方法一调用了windows的api,方法三需要设置loacle

关于string转换为wstring问题的更多相关文章

  1. string 到 wstring的转换

    string 到 wstring的转换_一景_新浪博客     string 到 wstring的转换    (2009-08-10 20:52:34)    转载▼    标签:    杂谈    ...

  2. C++ struct结构体定义构造函数和析构函数,构造函数参数从VS2017平台转换到Qt5平台下构建出错,采用字符集转换函数将string类型转换为wstring,构建仍然出错!

    调试win硬件驱动,需要利用VS编译的win驱动构建自己的Qt5GUI程序: 其中部分win驱动源码如下 device_file::device_file(const std::string& ...

  3. 基于标准库实现string和wstring的转换

    // convert string to wstring std::wstring to_wstring(const std::string& str, const std::locale&a ...

  4. string、wstring、cstring、 char、 tchar、int、dword转换方法(转)

    string.wstring.cstring. char. tchar.int.dword转换方法(转)   最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结 ...

  5. STL的string和wstring

    STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就 ...

  6. [C++]C++标准里 string和wstring

    typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型, ...

  7. 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下. #ifndef USE_H_ #define USE_H_ # ...

  8. 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_     ...

  9. How to convert string to wstring?

    How to convert string to wstring? - Codejie's C++ Space - C++博客     How to convert string to wstring ...

随机推荐

  1. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...

  2. 大学四年的Python学习笔记分享之一,内容整理的比较多与仔细

    翻到以前在大学坚持记录的Python学习笔记,花了一天的时间整理出来,整理时不经回忆起大学的时光,一眨眼几年就过去了,现在还在上学的你们,一定要珍惜现在,有个充实的校园生活.希望这次的分享对于你们有学 ...

  3. 更改已安装的织梦dedecms系统数据库表前缀

    1 修改之前我们先备份下数据,备份的操作过程是:网站后台------系统------数据库备份/还原-------然后按提交.默认保存的数据在data/backupdata目录下. 2 修改目录下da ...

  4. 一个完整的SEO优化方案

    一个完整的SEO优化方案主要由四个小组组成: 一.前端/页编人员 二.内容编辑人员 三.推广人员 四.数据分析人员 接下来,我们就对这四个小组分配工作. 首先,前端/页编人员主要负责站内优化,主要从四 ...

  5. xmind使用技巧

    xmind看似每个人都会使用,但是掌握一些小技巧,能够有效提升工作效率. 多行复制粘贴 在xmind中选中多行,复制然后可以直接粘贴到excel.word当中. 在excel.word选中多行,复制然 ...

  6. jmeter旅程第二站:jmeter登录接口测试

    因为上一篇已经讲了jmeter抓包,那么接下来会将讲解jmeter接口测试. 这里以浏览器为例. 从简到繁,那么首先先以比较常见的登录做实例. 目前登录操作有这几种:账户是否存在.账户密码登录.验证码 ...

  7. jmeter设置为中文

    我的jmeter安装路径是在D:\Jmeter\apache-jmeter-5.1.1\bin. 设置中文有2种方法: 1.第一种方法:点击jmeter.bat进入jmeter界面,点击[option ...

  8. HTML 网页开发、CSS 基础语法—— 一. HTML概述(了解网页)

    1. 网页的本质 ① HTML就是用来制作网页文件的. ② 浏览器查看的网页都是.html或.htm文件. ③ HTML叫做超文本标记语言(Hypertext Markup Language),用于搭 ...

  9. 浅谈语音质量保障:如何测试 RTC 中的音频质量?

    日常音视频开会中我们或多或少会遭遇这些场景:"喂喂喂,可以听到我说话吗?我听你的声音断断续续的","咦,我怎么可以听到回声?","太吵啦,我听不清楚你 ...

  10. P4323-[JSOI2016]独特的树叶【换根dp,树哈希】

    正题 题目链接:https://www.luogu.com.cn/problem/P4323 题目大意 给出\(n\)个点的树和加上一个点之后的树(编号打乱). 求多出来的是哪个点(如果有多少个就输出 ...