wchar* char*相互转换
创始人
2024-05-24 08:14:29
0

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

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个参数。

后续我还会在此篇博客上更新其他的一些数据类型转换

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...