//--从CString到UNICODE的转换--
int CStringToUnicode(const CString &cStr, void *sChar)
{
wchar_t *lpszW = new WCHAR[1024];
 
int nLen = (MultiByteToWideChar(CP_ACP, 0,(LPTSTR)(LPCTSTR)cStr, -1, NULL, NULL)-1)*2;
    MultiByteToWideChar(CP_ACP, 0, (LPTSTR)(LPCTSTR)cStr, -1, lpszW, nLen);
memcpy(sChar, lpszW, nLen);
delete[] lpszW;
return nLen;
}
//--从UNICODE到CString的转换--
CString UnicodeToCString(const char *sChar, int nStart, int nLen)
{
wchar_t *lpszW = new WCHAR[nLen/2];

memset((char*)lpszW, 0x00, nLen);
memcpy(lpszW, (LPWSTR)(sChar + nStart), nLen);
int rLen = nLen;
char *dChar = new char[rLen];
memset(dChar, 0x00, rLen);
WideCharToMultiByte(CP_ACP, 0, lpszW, rLen/2, dChar, rLen, NULL, NULL);
dChar[rLen] = '\0'; delete[] lpszW; return dChar;
}
请问我这两个字符转换的函数有问题么?请指出谢谢!

解决方案 »

  1.   

    既然是UNICODE,为使么函数的参数还是void * / const char *
      

  2.   

    名字就有问题
    CString是个类
    你应该是XXXTOUNICODE(XXX是编码)BIG5TOUNICODE...
    下的是CP_ACP就叫ANSITOUNICODE
      

  3.   

    WideCharToMultiByte(CP_ACP, 0, lpszW, rLen/2, dChar, rLen, NULL, NULL);
    这里的rLen下的可靠吗? int nLen = (MultiByteToWideChar(CP_ACP, 0,(LPTSTR)(LPCTSTR)cStr, -1, NULL, NULL)-1)*2;
        MultiByteToWideChar(CP_ACP, 0, (LPTSTR)(LPCTSTR)cStr, -1, lpszW, nLen);这里len不用*2
      

  4.   

    int nLen = (MultiByteToWideChar(CP_ACP, 0,(LPTSTR)(LPCTSTR)cStr, -1, NULL, 
    NULL)-1)*2;
    好像函数的最后一个参数应该是0吧