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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值