说道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

C++ WINDOWS下 wchar_t *和char * 相互转化总结篇的更多相关文章

  1. windows下wchar_t* 转char*

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

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

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

  3. windows下wchar_t的问题

    使用vs新建工程或者编译工程的时候默认在编译设置里面讲wchar_t设置为内置类型,如下图: 但是在编译相互依赖的工程的时候,如果有的工程不将wchar_t设置为内置类型的时候,将会出现链接错误,需要 ...

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

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

  5. windows下spark开发环境配置

    http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...

  6. ES1:Windows下安装ElasticSearch

    ElasticSearch(简称ES)是一个基于Lucene的分布式全文搜索服务器,本随笔演示在Windows安装ElasticSearch和用于管理ES的Head插件. ElasticSearch官 ...

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

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

  8. ElasticSearch入门 :Windows下安装ElasticSearch

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

  9. windows 下 gdb 的安装

    在 windows 下 gcc/g++ 的安装 这篇文章中已经提到,用MinGW Installation Manager可以方便地管理 MinGW 组件,因此使用该软件安装 gdb . 打开 Min ...

随机推荐

  1. python解释器遇到if __name__=="__main__"会如何做?

    python解释器遇到if __name__=="__main__"会如何做 # Threading example import time, thread def myfunct ...

  2. Eclipse 无输出,但不报错

    解决方法: 若界面中都没有console选项,则 工具栏 Window - Show View - Console Window - Preferences - Run/Debug - Console ...

  3. oracle中计算百分比,并同时解决小数点前0不显示的问题

    select a.catalog_name,decode(substr(trunc((a.s/b.count2),4)*100||'%',0,1),'.',replace(trunc((a.s/b.c ...

  4. int和intege相比

    int i = 100; Integer i1 = 100; Integer i2 = new Integer(100); system.out.println(i == i1);true syste ...

  5. vim 命令图解

    vim 命令,vim是一个很好的编辑工具,下面为大家介绍一下vim入门基本命令. 方法/步骤   1 [vim 命令-启动vimtutor]:执行命令:vimtutor.vimtutor是vim使用入 ...

  6. jupyter notebook不能选择虚拟环境的解决方法

    今天使用dlib没有py37版本,因此创建了Version_36虚拟环境.但jupyter notebook默认的内核找不到新建的虚拟环境,解决方法是需要安装两个包: × ipykernel × nb ...

  7. vue笔记-模板,计算属性,class与style,data属性

    数据和方法 1:只有当实例被创建时 data 中存在的属性才是响应式的,也可以预定义一些空的属性,唯一的意外就是Object.freeze(obj),这会阻止修改现有的属性;也就是说一个数据在放到根实 ...

  8. JVM之浮点数(float)表示

    1. 浮点数的组成:符号位.指数位.尾数位. 1.1 符号位: 占1位,表示正负数: 1.2 指数位: 占8位: 1.3 尾数位: 占23位. 2.  浮点数的表示: 2.1 取值: sflag * ...

  9. SpringBoot使用Swagger2实现Restful API

    很多时候,我们需要创建一个接口项目用来数据调转,其中不包含任何业务逻辑,比如我们公司.这时我们就需要实现一个具有Restful API的接口项目. 本文介绍springboot使用swagger2实现 ...

  10. 前后端通过API交互

    前两篇已经写好了后端接口,和前段项目环境也搭建好了 现在要通过接口把数据展示在页面上 先占位置写架子 创建一个头部组件和底部组件占位置 <template> <h1>这是头部组 ...