说道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 * 相互转化总结篇相关推荐

  1. c语言 wchar t转char,C++ WINDOWS下 wchar_t *和char * 相互转化总结篇

    说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...

  2. windows下wchar_t* 转char*

    这个在windows下很常见,常用,留个档. 一般用这个函数: size_t wcstombs(char *mbstr,const wchar_t *wcstr,size_t count ); mbs ...

  3. 在Windows下远程桌面连接Linux - VNC篇

    VNC是由AT&T试验室开发,是一款优秀的远程控制工具软件,后来以GPL授权的形式开源.经过几年的发展,现在的VNC已经不单指某个软件,而是一类软件的通称.下面介绍Linux下常用的两个VNC ...

  4. c语言wchar转化为char_linux 下 wchar_t和char的相互转化

    C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等, ...

  5. Linux下 wchar_t 与char 转换

    为了支持多语言,需要支持宽字符,Linux下用wchar_t表示,wchar_t最大长度4个字节,已经可以囊括世界上所有的语言编码,中文字符在gb2312编码下用2个字节表示,但用utf-8编码需要3 ...

  6. linux下中文的wchar转char,Linux下 wchar_t 与char 转换

    为了支持多语言,需要支持宽字符,Linux下用wchar_t表示,wchar_t最大长度4个字节,已经可以囊括世界上所有的语言编码,中文字符在gb2312编码下用2个字节表示,但用utf-8编码需要3 ...

  7. 在 Windows 下远程桌面连接 Linux - XManager 篇

    XManager是一个简单易用的高性能的运行在Windows平台上的X-Server软件,而Gnome和KDE就是X-Client,Linux下的X-Server则为Xorg.它能把远端Unix/Li ...

  8. ElasticSearch入门 第一篇:Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  9. ElasticSearch入门 :Windows下安装ElasticSearch

    这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

最新文章

  1. Linux C编程之一:Linux下c语言的开发环境
  2. 数据如何写入到HBase
  3. git 创建邮箱 用户名_git设置用户名和邮箱
  4. 【控制】多智能体系统总结。4.控制协议。
  5. 【ROS-rviz】发布一个图像结果 topic
  6. SQL语句使用总结(一)
  7. python装饰器函数执行后日志_Python装饰器记录日志、异常处理、函数添加,python,处理函数,功能...
  8. 分享50佳高质量免费按钮图标资源(上篇)[zz]
  9. java操作ElasticSearch(包含增删改查及基础语法操作)
  10. linux中ldd命令查看二进制文件(程序或库)所依赖的其他库(LIBTIFF_4.0未定义的引用问题)
  11. 电视hdr测试软件,HDR是什么意思 如何打开电视机的HDR10模式
  12. 计算机《画图》教案学生状态,《初识“画图”》教案设计.doc
  13. LeetCode 一题多解 | 53. 最大子数组和:五种解法完全手册
  14. linux系统下载18.04,在Ubuntu 18.04系统中下载安装Persepolis Download Manager
  15. vue安装node-sass错误
  16. 正式宣布,小米10在高端市场碾压华为,夺下电商平台销量第一名
  17. 加州欧文计算机工程专业,加州大学欧文分校计算机工程排名第29(2020年TFE美国排名)...
  18. 解决swap file .swp already exists 问题
  19. 【UV打印机】电气之负压系统(一)
  20. c语言写txt文件fwrite,文件操作 fwrite,该怎么处理

热门文章

  1. Nitrozme Animation Studio Packages Mac(AE插件拓展包)
  2. 7650 不定方程求解 python
  3. s7.net 写数据到plc_机器视觉软件开发系列——松下PLC下位机通信协议简介和实现...
  4. python 抓网卡数据包_Python选择网卡发包及接收数据包
  5. HTTP笔记-浏览器是如何识别点击的链接是下载文件还是展示页面
  6. Python笔记-BeautifulSoup通过查找Id获取元素信息
  7. C++设计模式-组合模式
  8. C++ opengl 绘制三角形扇
  9. Qt学习笔记-Qt Graphic View Framework
  10. 7.2图的存储结构(邻接表)