博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ WINDOWS下 wchar_t *和char * 相互转化总结篇
阅读量:6593 次
发布时间:2019-06-24

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

说道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库一起作为笔记

 

https://blog.csdn.net/lightspear/article/details/54695123

转载于:https://www.cnblogs.com/time-is-life/p/9498362.html

你可能感兴趣的文章
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
LLDP(链路层发现协议)
查看>>
Ubuntu14 添加程序启动
查看>>
我的友情链接
查看>>
windows网络安全以及常见网络***方式
查看>>
警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
查看>>
JS字符串转换数字
查看>>
centos7-修改主机名
查看>>
面试宝典系列-mysql面试基础题
查看>>
spring data for mongo
查看>>
开启 URL 重写
查看>>
Journey源码分析二:整体启动流程
查看>>
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
七、MySQL中的字符集 - 系统的撸一遍MySQL
查看>>
centos7的php5.4竟然不支持原生的mysql
查看>>