项目里经常会用到这两种类型的转换,记录一下,这里如果有错误的,还请各位大佬指出

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*相互转换相关推荐

  1. WCHAR,CHAR,TCHAR的区别

    现在C++的字符分成两种类型wchar_t和char.   其中   WCHAR==wchar_t,CHAR==char.   TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char ...

  2. VC++ WCHAR,CHAR,TCHAR的区别

    C++的字符分成两种类型wchar_t和char.   其中   WCHAR==wchar_t,CHAR==char.   TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char. ...

  3. TCHAR与char相互转换

    VS中TCHAR与char相互转换 TCHAR转char char转TCHAR 示例 TCHAR转char size_t wcstombs( char *mbstr, const wchar_t *w ...

  4. c++中int与char相互转换

    一.ASCII 表 了解 int 与 char 相互转换之前,先让我们看一下 ASCII 码表. 其中数字字符对应的位置为:48 - 57. 二.char 转 int char 转 int 之前,先将 ...

  5. [小技巧][JAVA][转换]整型int与字符char相互转换

    借助String.valueOf()过渡 char -> String ->int char c; String str = String.valueOf(c); int i = Inte ...

  6. WCHAR char CString等常用类型互转

    1.CString to WCHAR*: [cpp]view plaincopy WCHAR *wch = (WCHAR*)str.GetBuffer(str.GetLength()); str为CS ...

  7. Qt QString 与char* 相互转换

    Qt下,字符串都是使用QString,但是很多时候我们需要的char* 这样的参数. 下面介绍两种转换的方法: 1.QString转为QByteArray然后再转为char* QString Qstr ...

  8. MFC开发- string、const char*、 char* 、char[]相互转换(全)

    string.const char*. char* .char[]四者类型经常会需要转化. 一:转化总结形式如下: 使用时,要对源格式和目标格式进行初始化.源格式赋值为具体的内容,目标格式赋值为空. ...

  9. WIN32开发之Unicode字符集下cstring转换为char[]相互转换

    1.CString转char[] CString SeveName:// char ch[100]; memcpy(a, SeveName, SeveName.GetLength() * 2); fo ...

最新文章

  1. POJ1064(二分搜索)解题报告
  2. 【科普】boy and girl,你是不是对算法工程师有误解
  3. vue项目token放在哪里_关于vue动态菜单的那点事
  4. 功能对等四个原则_强直患者功能锻炼十分重要
  5. linux内存占用查看
  6. 人生长途,感受着不断拼搏...
  7. USB OTG简单介绍
  8. qt5 tcp服务器编程 多固定客户_服务器与客户端进程之间端口号联系
  9. 计算机管理工具怎么设置,电脑音频管理器怎么设置,教你电脑音频管理器怎么设置...
  10. mysql jdbc 绑定变量_「MySQL高级特性——绑定变量」- 海风纷飞Blog
  11. 计算机维修5级,电脑芯片级维修教程
  12. 高德尝试用“成本价”推动共享,但高精地图行业不只有价格
  13. 利用Office PPT录制演示视频
  14. 炒股杠杆放大多少合适
  15. 处理火狐浏览器地址栏点击出现 百度/58同城/爱淘宝 链接
  16. Lei ❤函数的初识
  17. java获取当前时间(年月日)
  18. 设计模式-备忘录模式(快照模式)
  19. .NET北京俱乐部,技术的饕餮盛宴,不枉此行
  20. java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成

热门文章

  1. 关于“无穷”的概念---数学笔记“无穷”
  2. Dojo学习笔记一: 认识Dojo
  3. 【数据库】 如何对数据库进行操作
  4. 我理解的云桌面(或桌面云)
  5. Spring MVC框架中关于限制请求方式
  6. 基于Java毕业设计东理咨询交流论坛源码+系统+mysql+lw文档+部署软件
  7. 综述|基于深度学习的目标检测(一)
  8. node和npm的关系,node和npm的关联
  9. 【Java爬虫】Jsoup
  10. 终端I/O termios属性设置 tcsetattr设置