C++ STL(二)string与wstring互转
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ STL(二)string与wstring互转,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2221字,纯文字阅读大概需要4分钟。
内容图文
![C++ STL(二)string与wstring互转](/upload/InfoBanner/zyjiaocheng/649/4597e67165cd4f70b5ef9c683f482e38.jpg)
1.使用windows api方式转换
MultiByteToWideChar()
WideCharToMultiByte()
需要包含头文件<Windows.h>
1 void StringToWstring_WindowApi(const string &str, wstring &wstr) 2 { 3 int nLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); 4 wchar_t* buffer = new wchar_t[nLen + 1]; 5 6 MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, nLen); 7 8 buffer[nLen] = '\0'; //字符串断尾 9 wstr = buffer; //赋值 10 delete[] buffer; //删除缓冲区 11 } 12 void WstringToString_WindowsApi(const wstring &wstr, string &str) 13 { 14 int nLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL); 15 char* buffer = new char[nLen + 1]; 16 WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, nLen, NULL, NULL); 17 buffer[nLen] = '\0'; //字符串断尾 18 str = buffer; //赋值 19 delete[] buffer; //删除缓冲区 20 }
2.使用ATL宏方式转换
A2W()
W2A()
需要包含头文件<atlconv.h>
使用API上一行加上USES_CONVERSION宏
注意:这个宏从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放.千万别在循环中使用宏
1 void StringToWstring_ATL(const string &str, wstring &wstr) 2 { 3 USES_CONVERSION; 4 wstr = A2W(str.c_str()); 5 } 6 void WstringToString_ATL(const wstring &wstr, string &str) 7 { 8 USES_CONVERSION; 9 str = W2A(wstr.c_str()); 10 }
3.使用CRT库方式转换(这种方式可以跨平台)
mbstowwcs()
wcstombs()
需要包含头文件<locale.h> 设置locale
1 void StringToWstring_CRT(const string &str, wstring &wstr) 2 { 3 string curLocale = setlocale(LC_ALL,NULL); //curLocale = "C" 4 setlocale(LC_ALL, "chs"); 5 int nLen = str.size() + 1; 6 mbstowcs((wchar_t*)wstr.c_str(), str.c_str(), nLen); 7 setlocale(LC_ALL, curLocale.c_str()); 8 9 return ; 10 } 11 void WstringToString_CRT(const wstring &wstr, string &str) 12 { 13 string curLocale = setlocale(LC_ALL,NULL); //curLocale = "C" 14 setlocale(LC_ALL, "chs"); 15 int nLen = wstr.size() + 1; 16 wcstombs((char*)str.c_str(), wstr.c_str(), nLen); 17 setlocale(LC_ALL, curLocale.c_str()); 18 19 return ; 20 }
内容总结
以上是互联网集市为您收集整理的C++ STL(二)string与wstring互转全部内容,希望文章能够帮你解决C++ STL(二)string与wstring互转所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。