博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wchar_t与char转换、wstring与string转换
阅读量:6885 次
发布时间:2019-06-27

本文共 1414 字,大约阅读时间需要 4 分钟。

1、wstring string转换 1)win32下wchar_t占2个字节,linux下wchar_t占4个字节。wchar_t的高字节应该存放在char数组的低字节。 2)win下面有函数WideCharToMultiByte() 和 MultiByteToWideChar() 3)linux类似的函数有:mbstowcs() wcstombs()
wcstombs和mbstowcs使用:
#include 
setlocale(LC_ALL, "");wcstombs(char * to,wchar_t * from,size_t _maxCount);mbstowcs(wchar_t * to,char * from,size_t _maxCount); //_maxCount,大小一定要是from长度的2倍,否则出来的中文也会是乱码
demo:
#include 
#include
#include
std::string ws2s(const std::wstring& ws){ std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C"; setlocale(LC_ALL, "chs"); const wchar_t* _Source = ws.c_str(); size_t _Dsize = 2 * ws.size() + 1; char *_Dest = new char[_Dsize]; memset(_Dest,0,_Dsize); wcstombs(_Dest,_Source,_Dsize); std::string result = _Dest; delete []_Dest; setlocale(LC_ALL, curLocale.c_str()); return result;}std::wstring s2ws(const std::string& s){ 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); mbstowcs(_Dest,_Source,_Dsize); std::wstring result = _Dest; delete []_Dest; setlocale(LC_ALL, "C"); return result;}

 

2、Notice:

使用iostream中的io流输入输出wstring或者wchar时,设置locale后,使用wcin及wcout输入输出。

参考:

转载于:https://www.cnblogs.com/changxiaoxiao/archive/2013/05/16/3081894.html

你可能感兴趣的文章
十二年IT职业生涯心得--致我们终将逝去的青春(连载)
查看>>
我的友情链接
查看>>
初学Redis(2)——用Redis作为Mysql数据库的缓存
查看>>
使用Jersey构建图片服务器 有回显图片功能
查看>>
SQL 去重
查看>>
ubuntu 设置静态IP
查看>>
linux文档的压缩与打包
查看>>
百度贴吧爬虫程序
查看>>
如何卸载失效的vCenter插件
查看>>
GPFS通用并行文件系统之Centos5.8部署gpfs集群
查看>>
SqlHelper:带sqlParameter,对sql server增、册、查、改的公用方法
查看>>
【Exchange 2019 設置技巧】用戶郵箱默認配額設定
查看>>
centos虚拟机实现上网
查看>>
我的友情链接
查看>>
处理HP-UNIX面板灯报警及配置MP
查看>>
Java多线程和线程池
查看>>
配置docker使用overlay2存储
查看>>
邮件服务器迁移方案让企业邮箱安心“搬家”
查看>>
Reflect
查看>>
Linux下的串口系列---struct termios结构体
查看>>