//--从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;
}
请问我这两个字符转换的函数有问题么?请指出谢谢!
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;
}
请问我这两个字符转换的函数有问题么?请指出谢谢!
CString是个类
你应该是XXXTOUNICODE(XXX是编码)BIG5TOUNICODE...
下的是CP_ACP就叫ANSITOUNICODE
这里的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
NULL)-1)*2;
好像函数的最后一个参数应该是0吧