C++ WINDOWS下 wchar_t *和char * 相互转化总结篇
说道wchar_t和char两个类型大家都不会陌生
wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节
char:当然就是指一个字节,在windows下面默认是gbk编码的
所以在windows 下 wchar_t 转 char也就是编码转化
直接贴出wchar_t *字符串和char *字符串的集中互转方法
方法一:利用Windows的宏W2A,A2W
USES_CONVERSION;
char* test1 = W2A(L"我是宽字节");//转化成默认
wchar_t* test12 = A2W("我是窄字节");
方法二:利用Windows里的ATL里面的类CW2A和CA2W,在转换时候还可以顺便调整编码,不加第二个参数就是保持GBK不变
std::string test3 = CW2A(L"中文字符", CP_UTF8);//一般可以加一下第二个参数,顺便切换编码
std::wstring test4 = CA2W("中文字符");//一般不用加第二个参数
方法三:利用Windows API中的函数 WideCharToMultiByte 和 MultiByteToWideChar ,而且也是可以带自定义编码转换
以下函数用法: CharToWchar可以等效于CW2A,WcharToChar可以等效于CA2W
std::wstring CharToWchar(const char* c, size_t m_encode = CP_ACP)
{
std::wstring str;
int len = MultiByteToWideChar(m_encode, 0, c, strlen(c), NULL, 0);
wchar_t* m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(m_encode, 0, c, strlen(c), m_wchar, len);
m_wchar[len] = '\0';
str = m_wchar;
delete m_wchar;
return str;
}
std::string WcharToChar(const wchar_t* wp, size_t m_encode = CP_ACP)
{
std::string str;
int len = WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
char *m_char = new char[len + 1];
WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
m_char[len] = '\0';
str = m_char;
delete m_char;
return str;
}
方法四:将使用标准C的mbstowcs方法和wcstombs方法,且配合标准C的setlocale方法,这也是利用标准库跨平台的做法,
但是过程没法直接转成自定义的编码,需要额外转码。所以在Windows平台开发的话不推荐。
注意:方法四将留在后面的blog和iconv库一起作为笔记
C++ WINDOWS下 wchar_t *和char * 相互转化总结篇相关推荐
- c语言 wchar t转char,C++ WINDOWS下 wchar_t *和char * 相互转化总结篇
说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...
- windows下wchar_t* 转char*
这个在windows下很常见,常用,留个档. 一般用这个函数: size_t wcstombs(char *mbstr,const wchar_t *wcstr,size_t count ); mbs ...
- 在Windows下远程桌面连接Linux - VNC篇
VNC是由AT&T试验室开发,是一款优秀的远程控制工具软件,后来以GPL授权的形式开源.经过几年的发展,现在的VNC已经不单指某个软件,而是一类软件的通称.下面介绍Linux下常用的两个VNC ...
- c语言wchar转化为char_linux 下 wchar_t和char的相互转化
C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等, ...
- Linux下 wchar_t 与char 转换
为了支持多语言,需要支持宽字符,Linux下用wchar_t表示,wchar_t最大长度4个字节,已经可以囊括世界上所有的语言编码,中文字符在gb2312编码下用2个字节表示,但用utf-8编码需要3 ...
- linux下中文的wchar转char,Linux下 wchar_t 与char 转换
为了支持多语言,需要支持宽字符,Linux下用wchar_t表示,wchar_t最大长度4个字节,已经可以囊括世界上所有的语言编码,中文字符在gb2312编码下用2个字节表示,但用utf-8编码需要3 ...
- 在 Windows 下远程桌面连接 Linux - XManager 篇
XManager是一个简单易用的高性能的运行在Windows平台上的X-Server软件,而Gnome和KDE就是X-Client,Linux下的X-Server则为Xorg.它能把远端Unix/Li ...
- ElasticSearch入门 第一篇:Windows下安装ElasticSearch
这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 :Windows下安装ElasticSearch
这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
最新文章
- Linux C编程之一:Linux下c语言的开发环境
- 数据如何写入到HBase
- git 创建邮箱 用户名_git设置用户名和邮箱
- 【控制】多智能体系统总结。4.控制协议。
- 【ROS-rviz】发布一个图像结果 topic
- SQL语句使用总结(一)
- python装饰器函数执行后日志_Python装饰器记录日志、异常处理、函数添加,python,处理函数,功能...
- 分享50佳高质量免费按钮图标资源(上篇)[zz]
- java操作ElasticSearch(包含增删改查及基础语法操作)
- linux中ldd命令查看二进制文件(程序或库)所依赖的其他库(LIBTIFF_4.0未定义的引用问题)
- 电视hdr测试软件,HDR是什么意思 如何打开电视机的HDR10模式
- 计算机《画图》教案学生状态,《初识“画图”》教案设计.doc
- LeetCode 一题多解 | 53. 最大子数组和:五种解法完全手册
- linux系统下载18.04,在Ubuntu 18.04系统中下载安装Persepolis Download Manager
- vue安装node-sass错误
- 正式宣布,小米10在高端市场碾压华为,夺下电商平台销量第一名
- 加州欧文计算机工程专业,加州大学欧文分校计算机工程排名第29(2020年TFE美国排名)...
- 解决swap file .swp already exists 问题
- 【UV打印机】电气之负压系统(一)
- c语言写txt文件fwrite,文件操作 fwrite,该怎么处理
热门文章
- Nitrozme Animation Studio Packages Mac(AE插件拓展包)
- 7650 不定方程求解 python
- s7.net 写数据到plc_机器视觉软件开发系列——松下PLC下位机通信协议简介和实现...
- python 抓网卡数据包_Python选择网卡发包及接收数据包
- HTTP笔记-浏览器是如何识别点击的链接是下载文件还是展示页面
- Python笔记-BeautifulSoup通过查找Id获取元素信息
- C++设计模式-组合模式
- C++ opengl 绘制三角形扇
- Qt学习笔记-Qt Graphic View Framework
- 7.2图的存储结构(邻接表)