CString轉換爲char *
CString
strCheckIP ;
GetDlgItemText(IDC_IPADDRESS,strCheckIP);
方法一:使用API:WideCharToMultiByte進行轉換
//注意:以下n和len的值大小不同,n是按字符計算的,len是按字節計算的int n = strIP.GetLength();
//獲取寬字節字符的大小,大小是按字節計算的
int len = WideCharToMultiByte(CP_ACP,0,strIP,strIP.GetLength(),NULL,0,NULL,NULL);
//多字節字符數組申請空間,數組大小爲按字節計算的寬字節字節大小char * pIP = new char[len+1]; //以字節爲單位,
//寬字節編碼轉換成多字節編碼
WideCharToMultiByte(CP_ACP,0,strCheckIP,strCheckIP.GetLength(),pIP,len,NULL,NULL);pIP[len] ='\0'; //多字節字符以'\0'結束
方法二:使用函數:T2A、W2A
char * pIP1 =T2A(strCheckIP); //調用函數,T2A和W2A均支持ATL和MFC中的字符轉換
addrTo.sin_addr.s_addr = inet_addr(pIP1); //設置地址
char * pIP2 = W2A(strCheckIP); //也可實現轉換
注意:有時候可能還需要添加引用#include <afxpriv.h>
char *轉換爲CString
char szHostName[MAX_PATH + 1];
gethostname(szHostName, MAX_PATH);
//得到計算機名
hostent *p = gethostbyname(szHostName); //從計算機名得到主機信息
if(p == NULL)
{
AfxMessageBox(L"得到本機網絡信息失敗!");
return NULL;
}
char *pIP = inet_ntoa(*(in_addr *)p->h_addr_list[0]); //將32位IP轉化爲字符串IP
方法一:使用_T() 宏,將字符串轉換爲寬字符
CString str =_T("測試字符串轉換");
方法二:使用API:MultiByteToWideChar進行轉換
CString m_strName;
//m_strName.Format(L"%s",szHostName); //保存主機名
int charLen = strlen(szHostName);
//計算char *數組大小,以字節爲單位,一個漢字佔兩個字節
int len =MultiByteToWideChar(CP_ACP,0,szHostName,charLen,NULL,0); //計算多字節字符的大小,按字符計算。
TCHAR *buf = new TCHAR[len + 1]; //爲寬字節字符數組申請空間,數組大小爲按字節計算的多字節字符大小
MultiByteToWideChar(CP_ACP,0,szHostName,charLen,buf,len); //多字節編碼轉換成寬字節編碼
buf[len] ='\0'; //添加字符串結尾,注意不是len+1
m_strName.Append(buf);
方法三:使用函數:A2T、A2W
CString m_strAddr;
//m_strAddr.Format(L"%s",pIP); //保存主機IP地址
USES_CONVERSION;
m_strAddr = A2T(pIP);
LPARAM 轉 CString
LPARAM lParam
//LPARAM->CString 方法一
CString str1((char*)lParam);
//LPARAM->CString 方法二
CString str2;
str2 = (char*)lParam; // --運算符重載
//LPARAM->CString 方法三 vs2010 亂碼
CString str3;
str3.Format(L"%s", (char*)lParam);