//************************************************************
// 函数名称: string_To_UTF8
// 函数说明: string转UTF8
// 参 数: str 需要转换的字符串
// 返 回 值: string 转换后的字符串
//***********************************************************
std::string string_To_UTF8(const std::string & str)
{
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr(pBuf);
delete[]pwBuf;
delete[]pBuf;
pwBuf = NULL;
pBuf = NULL;
return retStr;
}
//************************************************************
// 函数名称: Wchar_tToString
// 函数说明: wchar转string
// 参 数: wchar 需要转换的字符串
// 返 回 值: string 转换后的字符串
//***********************************************************
std::string Wchar_tToString(wchar_t *wchar)
{
std::string szDst;
wchar_t * wText = wchar;
DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, NULL, 0, NULL, FALSE);// WideCharToMultiByte的运用
char *psText; // psText为char*的临时数组,作为赋值给std::string的中间变量
psText = new char[dwNum];
WideCharToMultiByte(CP_OEMCP, NULL, wText, -1, psText, dwNum, NULL, FALSE);// WideCharToMultiByte的再次运用
szDst = psText;// std::string赋值
delete[]psText;// psText的清除
return szDst;
}
//************************************************************
// 函数名称: StringToWchar_t
// 函数说明: string转wchar
// 参 数: str 需要转换的字符串
// 返 回 值: wchar_t* 转换后的字符串
//***********************************************************
wchar_t * StringToWchar_t(const std::string & str)
{
wchar_t * m_chatroommmsg = new wchar_t[str.size() * 2]; //
memset(m_chatroommmsg, 0, str.size() * 2);
setlocale(LC_ALL, "zh_CN.UTF-8");
swprintf(m_chatroommmsg, str.size() * 2, L"%S", str.c_str());
return m_chatroommmsg;
}
常用的字符转换函数
最新推荐文章于 2023-11-24 18:13:30 发布