std::string、LPCWCH、LPSTR之间转换
最近在写一个程序,用到了windows 原始API,遇到了字符之间的转换问题,在网上发现,都不是很全面。所以整理一下源码,记录一下,希望帮到有需要的人。
/*******************************************************************************
* Function : LPCWCH2LPSTR
* Description: LPCWCH转换LPSTR
* Calls : 见函数实现
* Called By :
* Input :
* Output :
* Return :
* Others :
********************************************************************************/
LPSTR LPCWCH2LPSTR(const LPCWCH strCS)
{
const UINT wLen = lstrlen(strCS) + 1;
UINT aLen = WideCharToMultiByte(CP_ACP, 0, strCS, wLen, NULL, 0, NULL, NULL);
LPSTR lpa = new char[aLen+1];
memset(lpa, 0, aLen+1);
WideCharToMultiByte(CP_ACP, 0, strCS, wLen, lpa, aLen, NULL, NULL);
return lpa;
}
/*******************************************************************************
* Function : LPCWCH2STDString
* Description: LPCWCH转换LPSTR
* Calls : 见函数实现
* Called By :
* Input :
* Output :
* Return :
* Others :
********************************************************************************/
std::string LPCWCH2STDString(const LPCWCH strcs)
{
LPSTR ltmp = LPCWCH2LPSTR(strcs);
std::string stdStr(ltmp);
delete[] ltmp;
return stdStr;
}
/*******************************************************************************
* Function : STDString2LPWSTR
* Description: std::string转换LPWSTR
* Calls : 见函数实现
* Called By :
* Input :
* Output :
* Return :
* Others :
********************************************************************************/
LPWSTR STDString2LPCWCH(const std::string strcs)
{
UINT len = MultiByteToWideChar(CP_ACP, 0, strcs.c_str(), -1, NULL, 0);
LPWSTR wszasc = new WCHAR[len+1];
MultiByteToWideChar(CP_ACP, 0, strcs.c_str(), -1, wszasc, len);
return wszasc;
}