您的位置:首页 > 其它

宽字符与char*相互转换函数

2014-04-28 19:58 169 查看
问题源于将一个CString转成const char*,因为我的CString中存的是宽字符,所以各种转化均失效,最后在网上看到这两个函数,很好用

char *cctryWideCharToAnsi(wchar_t *pWideChar)

{
if (!pWideChar) return NULL;
char *pszBuf = NULL;
int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);
if (needBytes > 0){
pszBuf = new char[needBytes+1];
ZeroMemory(pszBuf, (needBytes+1)*sizeof(char));
WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pszBuf, needBytes, NULL, NULL);
}
return pszBuf;

}

wchar_t *cctryAnsiCharToWide(char *pChar)

{
if (!pChar) return NULL;
wchar_t *pszBuf = NULL;
int needWChar = MultiByteToWideChar(CP_ACP, 0, pChar, -1, NULL, 0);
if (needWChar > 0){
pszBuf = new wchar_t[needWChar+1];
ZeroMemory(pszBuf, (needWChar+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, pChar, -1, pszBuf, needWChar);
}
return pszBuf;
}

另附CString直接转化为char*的函数,也很实用

char* CStringToCharArray(CString str)

{
char *ptr;

#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char [len+1];
memset(ptr,0,len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);

#else
ptr = new char [str.GetAllocLength()+1];
sprintf(ptr,_T("%s"),str);

#endif
return ptr;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: