CString -- > char*
USES_CONVERSION;
char* pFilePath = T2A(vecFile[i]);
char* pSavePath = T2A(str);
https://blog.youkuaiyun.com/zhao_fu_lu/article/details/42298345
nLength = strIndexURLStr.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP, 0, strIndexURLStr, nLength, NULL, 0, NULL, NULL);
memset(m_UpdataVersionInfo.szIndexURL, 0, nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strIndexURLStr, nLength, m_UpdataVersionInfo.szIndexURL, nBytes, NULL, NULL);
m_UpdataVersionInfo.szIndexURL[nBytes] = 0;
char数组转CString
for (int i = 0; i < SerVersionInfo.nFileNum; i++)
{
CString strFileName = SerVersionInfo.vecFileName[i];
CString strFilePath("");
strFilePath.Format(_T("%s"), CA2T(SerVersionInfo.szIndexURL));
strFilePath = strFilePath +strFileName;
}
LPCWSTR转 CString
LPCWSTR pcwStr = L"TestpwcStr";
CString str(pcwStr);
1.char* 转换成 LPCTSTR
char ch[1024] = "wo shi ni baba";
int num = MultiByteToWideChar(0,0,ch,-1,NULL,0);
wchar_t *wide = new wchar_t[num];
MultiByteToWideChar(0,0,ch,-1,wide,num);
解析:
num 获得长字节所需的空间
MultiByteToWideChar()表示将s中的字符传递到ps指向的内存中。-1表示传输至s中的'\0'处,num表示传递的字节个数。
2.LPCTSTR 转换成 char *
wchar_t widestr[1024] = L"wo shi ni yeye";
int num = WideCharToMultiByte(CP_OEMCP,NULL,widestr,-1,NULL,0,NULL,FALSE);
char *pchar = new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,widestr,-1,pchar,num,NULL,FALSE);
关于unicode模式下CString 转LPCSTR问题:
CString str=_T("1234567890");
LPCSTR lpstr=(LPCSTR)str.GetBuffer();
这个时候,lpstr的值却为“1”,仅为str中的首个字符。
找了许久,始终没有找到解决方案,最后想到一个方法:
因为LPCSTR为ansi字符串,而CString为unicode编码,因此可以通过T2A方式进行强转就可以了
LPCSTR lpstr=T2A(str);
这样当然还不行,还得将它转为LPCSTR类型:
LPCSTR lpstr=(LPCSTR)T2A(str);
OK,搞定!