关于string转换为wstring问题
方法一:需要调用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问题的更多相关文章
- string 到 wstring的转换
string 到 wstring的转换_一景_新浪博客 string 到 wstring的转换 (2009-08-10 20:52:34) 转载▼ 标签: 杂谈 ...
- C++ struct结构体定义构造函数和析构函数,构造函数参数从VS2017平台转换到Qt5平台下构建出错,采用字符集转换函数将string类型转换为wstring,构建仍然出错!
调试win硬件驱动,需要利用VS编译的win驱动构建自己的Qt5GUI程序: 其中部分win驱动源码如下 device_file::device_file(const std::string& ...
- 基于标准库实现string和wstring的转换
// convert string to wstring std::wstring to_wstring(const std::string& str, const std::locale&a ...
- string、wstring、cstring、 char、 tchar、int、dword转换方法(转)
string.wstring.cstring. char. tchar.int.dword转换方法(转) 最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结 ...
- STL的string和wstring
STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就 ...
- [C++]C++标准里 string和wstring
typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型, ...
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]
本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下. #ifndef USE_H_ #define USE_H_ # ...
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下: #ifndef USE_H_ ...
- How to convert string to wstring?
How to convert string to wstring? - Codejie's C++ Space - C++博客 How to convert string to wstring ...
随机推荐
- [第八篇]——Docker 容器使用之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. xxx@xxx:~# docker 可以通过命令 docke ...
- 忘记root密码的情况下如何给指定账户开通远程访问
1.跳过验证使用root登录 net stop mysql //停止MYSQL服务 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysqld --defaults-file=&qu ...
- SQLSERVER存储过程基础
SQLSERVER存储过程基础 1.声明变量 DECLARE @F001 SMALLINT, (三元素,声明declare+变量名+类型) @F002 INTEGER, @F003 V ...
- java的运行时数据区域
最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 1.程 ...
- 搞不定 NodeJS 内存泄漏?先从了解垃圾回收开始
通常来说,内存管理有两种方式,一种是手动管理,一种是自动管理. 手动管理需要开发者自己管理内存,什么时候申请内存空间,什么时候释放都需要小心处理,否则容易形成内存泄漏和指针乱飞的局面.C 语言开发是典 ...
- mongodb linux基本启动 基础增删改 mysql语法的对比
一.主流数据源类型 还存在自定义数据源以及REST接口数据,共6中数据源. 二.linux下启动连接数据库 进去mongodb的目录启动服务:mongo --host 192.168.320.826 ...
- mybatis if else if 条件判断SQL片段表达式取值和拼接
前言 最近在开发项目的时候涉及到复杂的动态条件查询,但是mybaits本身不支持if elseif类似的判断但是我们可以间接通过 chose when otherwise 去实现其中choose为一个 ...
- css 参考手册 部署到本地
* 到css参考手册网站 http://css.doyoe.com/ 下载chm手册 * 到github下载对应的html页面 cd /Applications/XAMPP/htdocs git cl ...
- 通宵修复BUG的思考
HYH.LXJ昨晚通宵修复11月版需求的bug,因为代码提到测试环境后,阻碍了一个分行进行验收测试,业务人员直接把问题反馈给了上级领导,压力下来,项目组就把问题重视起来. 对于通宵加班这件事,应该点赞 ...
- 一文让你彻底理解SELECT语句的执行逻辑
正常情况下SELECT的书写顺序和执行顺序: 书写顺序: SELECT>FROM >WHERE>GROUP BY>HAVE>ORDER BY 执行顺序: FROM > ...