wchar* char*相互转换
项目里经常会用到这两种类型的转换,记录一下,这里如果有错误的,还请各位大佬指出
wchar_t* String_TCHAR(const string& pKey)
{
const char* pCStrKey = pKey.c_str();
//第一次调用返回转换后的字符串长度,用于确认为wchar_t*开辟多大的内存空间
int pSize = MultiByteToWideChar(CP_ACP, 0, pCStrKey, -1, NULL, 0);
wchar_t *pWCStrKey = new wchar_t[pSize+1];
//第二次调用将单字节字符串转换成双字节字符串
MultiByteToWideChar(CP_ACP, 0, pCStrKey, -1, pWCStrKey, pSize);
pWCStrKey[pSize] = L'\0';
return pWCStrKey;//用完pWCStrKey后,记得delete
}
string WCHAR_String(wchar_t* pWCStrKey)
{
//第一次调用确认转换后单字节字符串的长度,用于开辟空间
int pSize = WideCharToMultiByte(CP_ACP, 0, pWCStrKey, -1, NULL, 0, NULL, NULL);
char* pCStrKey = new char[pSize + 1];
//第二次调用将双字节字符串转换成单字节字符串
WideCharToMultiByte(CP_ACP, 0, pWCStrKey, -1, pCStrKey, pSize, NULL, NULL);
pCStrKey[pSize] = '\0';
return pCStrKey;//用完pCStrKey 记得delete
}
其中主要用到的就是WideCharToMultiByte(双字节转单字节)和MultiByteToWideChar(单字节转双字节)这两个函数,至于为啥要调用两次,第一次是表示获取转换后的字符串长度,其中第四个参数设为-1表示的就是返回转换到字符串结尾的需要的长度,第二次调用第五个参数和第六个参数分别表示,转换后字符串存放的buffer和Size,保持和前面的获取的一致即可,至于为啥申请空间的时候长度加1,是为了让最后一个字符为'\0',符合字符串以'\0'结尾。
还有一个注意的是这两个函数有个区别,WideCharToMultiByte有8个参数,MultiByteToWideChar有6个参数。
后续我还会在此篇博客上更新其他的一些数据类型转换
wchar* char*相互转换相关推荐
- WCHAR,CHAR,TCHAR的区别
现在C++的字符分成两种类型wchar_t和char. 其中 WCHAR==wchar_t,CHAR==char. TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char ...
- VC++ WCHAR,CHAR,TCHAR的区别
C++的字符分成两种类型wchar_t和char. 其中 WCHAR==wchar_t,CHAR==char. TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char. ...
- TCHAR与char相互转换
VS中TCHAR与char相互转换 TCHAR转char char转TCHAR 示例 TCHAR转char size_t wcstombs( char *mbstr, const wchar_t *w ...
- c++中int与char相互转换
一.ASCII 表 了解 int 与 char 相互转换之前,先让我们看一下 ASCII 码表. 其中数字字符对应的位置为:48 - 57. 二.char 转 int char 转 int 之前,先将 ...
- [小技巧][JAVA][转换]整型int与字符char相互转换
借助String.valueOf()过渡 char -> String ->int char c; String str = String.valueOf(c); int i = Inte ...
- WCHAR char CString等常用类型互转
1.CString to WCHAR*: [cpp]view plaincopy WCHAR *wch = (WCHAR*)str.GetBuffer(str.GetLength()); str为CS ...
- Qt QString 与char* 相互转换
Qt下,字符串都是使用QString,但是很多时候我们需要的char* 这样的参数. 下面介绍两种转换的方法: 1.QString转为QByteArray然后再转为char* QString Qstr ...
- MFC开发- string、const char*、 char* 、char[]相互转换(全)
string.const char*. char* .char[]四者类型经常会需要转化. 一:转化总结形式如下: 使用时,要对源格式和目标格式进行初始化.源格式赋值为具体的内容,目标格式赋值为空. ...
- WIN32开发之Unicode字符集下cstring转换为char[]相互转换
1.CString转char[] CString SeveName:// char ch[100]; memcpy(a, SeveName, SeveName.GetLength() * 2); fo ...
最新文章
- POJ1064(二分搜索)解题报告
- 【科普】boy and girl,你是不是对算法工程师有误解
- vue项目token放在哪里_关于vue动态菜单的那点事
- 功能对等四个原则_强直患者功能锻炼十分重要
- linux内存占用查看
- 人生长途,感受着不断拼搏...
- USB OTG简单介绍
- qt5 tcp服务器编程 多固定客户_服务器与客户端进程之间端口号联系
- 计算机管理工具怎么设置,电脑音频管理器怎么设置,教你电脑音频管理器怎么设置...
- mysql jdbc 绑定变量_「MySQL高级特性——绑定变量」- 海风纷飞Blog
- 计算机维修5级,电脑芯片级维修教程
- 高德尝试用“成本价”推动共享,但高精地图行业不只有价格
- 利用Office PPT录制演示视频
- 炒股杠杆放大多少合适
- 处理火狐浏览器地址栏点击出现 百度/58同城/爱淘宝 链接
- Lei ❤函数的初识
- java获取当前时间(年月日)
- 设计模式-备忘录模式(快照模式)
- .NET北京俱乐部,技术的饕餮盛宴,不枉此行
- java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成
热门文章
- 关于“无穷”的概念---数学笔记“无穷”
- Dojo学习笔记一: 认识Dojo
- 【数据库】 如何对数据库进行操作
- 我理解的云桌面(或桌面云)
- Spring MVC框架中关于限制请求方式
- 基于Java毕业设计东理咨询交流论坛源码+系统+mysql+lw文档+部署软件
- 综述|基于深度学习的目标检测(一)
- node和npm的关系,node和npm的关联
- 【Java爬虫】Jsoup
- 终端I/O termios属性设置 tcsetattr设置