C++ wchar_t *和char * 互转

2023-05-16

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

说道wchar_t和char两个类型大家都不会陌生

wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节

char:当然就是指一个字节,在windows下面默认是gbk编码的

 

所以在windows 下 wchar_t 转 char也就是编码转化

 

直接贴出wchar_t *字符串和char *字符串的集中互转方法

方法一:利用Windows的宏W2A,A2W

 

 


   
  1. USES_CONVERSION;

  2. char* test1 = W2A(L"我是宽字节");//转化成默认

  3. wchar_t* test12 = A2W("我是窄字节");


 

 

方法二:利用Windows里的ATL里面的类CW2A和CA2W,在转换时候还可以顺便调整编码,不加第二个参数就是保持GBK不变

 


   
  1. std::string test3 = CW2A(L"中文字符", CP_UTF8);//一般可以加一下第二个参数,顺便切换编码

  2. std::wstring test4 = CA2W("中文字符");//一般不用加第二个参数


 

 

方法三:利用Windows API中的函数 WideCharToMultiByte 和 MultiByteToWideChar ,而且也是可以带自定义编码转换

以下函数用法: CharToWchar可以等效于CW2A,WcharToChar可以等效于CA2W

 


   
  1. std::wstring CharToWchar(const char* c, size_t m_encode = CP_ACP)

  2. {

  3. std::wstring str;

  4. int len = MultiByteToWideChar(m_encode, 0, c, strlen(c), NULL, 0);

  5. wchar_t* m_wchar = new wchar_t[len + 1];

  6. MultiByteToWideChar(m_encode, 0, c, strlen(c), m_wchar, len);

  7. m_wchar[len] = '\0';

  8. str = m_wchar;

  9. delete m_wchar;

  10. return str;

  11. }

  12.  
  13. std::string WcharToChar(const wchar_t* wp, size_t m_encode = CP_ACP)

  14. {

  15. std::string str;

  16. int len = WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);

  17. char *m_char = new char[len + 1];

  18. WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), m_char, len, NULL, NULL);

  19. m_char[len] = '\0';

  20. str = m_char;

  21. delete m_char;

  22. return str;

  23. }



方法四:将使用标准C的mbstowcs方法和wcstombs方法,且配合标准C的setlocale方法,这也是利用标准库跨平台的做法,

 

但是过程没法直接转成自定义的编码,需要额外转码。所以在Windows平台开发的话不推荐。

注意:方法四将留在后面的blog和iconv库一起作为笔记

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ wchar_t *和char * 互转 的相关文章

随机推荐

  • UVC摄像头开发(一)

    近期 xff0c 要做一个usb摄像头的开发 xff0c 然后看了韦东山老师的第三期视频 xff0c 讲UVC协议摄像头开发的教程 做一些记录 xff0c 以免忘记 1 当我们拿到一个摄像头 xff0c 怎么知道它的一些信息呢 xff1f
  • 分析锂电池充放电保护电路的特点及工作原理

    锂在元素周期表上位于第3位 xff0c 因外层电子数为1个 xff0c 容易失去从而形成稳定结构 xff0c 故锂是一种非常活泼的金属 由锂元素制成的锂离子电池 xff0c 具有放电电流大 内阻低 寿命长 无记忆效应等优点 xff0c 现已
  • vscode相关配置

    转载 作者 ifredom 原文链接 xff1a https blog csdn net win7583362 article details 79315055 配置详解 editor是针对vscode的风格设置 例如 tabSize xf
  • odroid x2安装ubuntu系统,HDMI显示,说说折腾事儿。

    安装的是Lubuntu14 04 xff0c odroid官网有下载 xff0c 烧写软件用官网下载的win32disk imager for odroid 不要用通用的win32disk image 可能不行 write烧写完毕之后记得v
  • VC http post 文件到服务器

    首先引入 include 34 afxinet h 34 其次准备好HTTP POST服务器 STDMETHODIMP CPostPDFToA4 t5PostPDFToA4 BSTR strFileName BSTR strFileFull
  • 宏参数

    一 可变参数宏 和 VA ARGS 1 1 直接替代 结果 xff1a weight 61 1 shipping 61 2 span class hljs comment define PR printf VA ARGS span PR s
  • 记Datax3.0解决MySQL抽数到HDFSNULL变为空字符的问题

    一 背景 使用Datax3 0 地址 xff1a https github com alibaba DataX 在HDFS读的时候开放了如下nullFormat选项 xff1a nullFormat 描述 xff1a 文本文件中无法使用标准
  • vector用法总结(定义,操作,方法,注意点)

    一 vector的基本概念 vector是同一种类型的对象的集合 xff0c 每个对象都有一个对应的整数索引值 和string对象一样 xff0c 标准库负责管理存储元素的相关内存 我们把vector称为容器 xff0c 是因为它可以包含其
  • windows c编写串口通信

    一 介绍 平时调试协议直接上其他平台不方便调试 xff0c 这里以windows平台的c语言实现串口通信 二 准备 1 串口调试助手 2 虚拟串口工具 3 dev c 43 43 4 vscode xff08 可以不用 xff09 三 代码
  • C++接口定义及实现举例

    C 43 43 接口定义及实现举例 一 接口的定义 有时候 xff0c 我们得提供一些接口给别人使用 接口的作用 xff0c 就是提供一个与其他系统交互的方法 其他系统无需了解你内部细节 xff0c 并且也无法了解内部细节 xff0c 只能
  • 2016年终总结

    关键点 xff1a 程序员修炼之道Java编程思想 xff08 Java并发 异常处理 xff09 代码大全2Bat批处理Shell编程正则表达式Shader之初体验Unity5 x资源打包和加载Android单机游戏 xff0c 医疗项目
  • 嵌入式debian没有lsusb命令解决

    问题 bash lsusb command not found 解决
  • Postman抓包教程

    目录 什么是抓包 xff1f 如何使用 Postman 进行抓包 查看历史抓包数据 使用抓包数据进行接口测试和开发 抓包技巧和注意事项 什么是抓包 xff1f 在计算机网络中 xff0c 抓包是指捕获网络流量的过程 抓包工具可以截获进出计算
  • Cmakelists 使用 gcc/g++

    转载 https blog csdn net afei article details 81201039 常用变量 预定义变量 PROJECT SOURCE DIR xff1a 工程的根目录 PROJECT BINARY DIR xff1a
  • ROS 环境配置问题

    如果 roslaunch beginner tutorials turtlemimic launch 发现 turtlemimic launch is neither a launch file in package beginner tu
  • getdate()函数

    定义和用法 getdate 函数取得日期 xff0f 时间信息 语法 getdate timestamp 参数 描述 timestamp 可选 规定 Unix 时间格式中的时间 说明 返回一个根据 timestamp 得出的包含有日期信息的
  • linux系统的嵌入式设备调试422串口

    1 登陆linux系统 xff0c 查看当前可用的设备 xff0c 在终端输入 xff1a dmesg grep ttyS 例如会显示如下 xff0c 当前ttyS0可用 2 可先使用linux系统中的串口调试工具 cutecom 检查线路
  • Windows核心编程之邮槽实现进程间通信

    邮槽是Windows系统提供的一种单向通信的机制 即进程中的一方只能写入或读取数据 xff0c 而另一方则只能读取或写入数据 通过邮槽 xff0c 用户可以实现一对多或跨网络的进程之间的通信 但是 xff0c 邮槽能传输的数据非常小 xff
  • 图像连通域分析

    转自 xff1a https blog csdn net tiandijun article details 51279643 xff0c 转载仅为方便学习 一 前言 二值图像的图像的亮度值只有两个状态 xff1a 黑 0 和白 255 二
  • C++ wchar_t *和char * 互转

    转自 xff1a https blog csdn net lightspear article details 54695123 说道wchar t和char两个类型大家都不会陌生 wchar t xff1a 在windows下是Unico