VC unicode下Cstring转char*

来源:互联网 发布:c语言数据结构教程 编辑:程序博客网 时间:2024/05/21 09:38

用法:
CStrFromWSTRU(CP_ACP, CString, CString.GetLength(), char*);
BSTRFromCStrU(CP_ACP, char*, CString);

函数定义:
BOOL CStrFromWSTRU(IN UINT codePage, IN LPCWSTR wstr, IN UINT len, OUT char *pStr)
{
if (len > 0)
{
size_t mblen = WideCharToMultiByte(codePage, 0, wstr, len, NULL, 0, NULL, NULL);
if (mblen > 0)
{
char buffer = (char )CoTaskMemAlloc(mblen + 1);
ZeroMemory(buffer, mblen + 1);
if (WideCharToMultiByte(codePage, 0, wstr, len, buffer, mblen, NULL, NULL))
{
//buffer[mblen] = ‘\0’;
memcpy(pStr, buffer, mblen);
*(pStr + mblen) = ‘\0’;
CoTaskMemFree(buffer);
return TRUE;
}
}
}
else *pStr = ‘\0’;

return FALSE;

};

BOOL BSTRFromCStrU(IN UINT codePage, IN LPCSTR s, OUT CString &csWStr)
{
csWStr = _T(“”);
int wideLen = MultiByteToWideChar(codePage, 0, s, -1, NULL, 0);
if (wideLen > 0)
{
WCHAR* wideStr = (WCHAR*)CoTaskMemAlloc(wideLen*sizeof(WCHAR));
if (NULL != wideStr)
{
BSTR bstr;

        ZeroMemory(wideStr, wideLen*sizeof(WCHAR));        MultiByteToWideChar(codePage, 0, s, -1, wideStr, wideLen);        bstr = SysAllocStringLen(wideStr, wideLen - 1);        CoTaskMemFree(wideStr);        csWStr = bstr;        SysFreeString(bstr);        return TRUE;    }}return FALSE;

}

0 0
原创粉丝点击