vs2010 使用Unicode字符集 CString 與 char *相互轉換

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   

       USES_CONVERSION;                                         //聲明標識符
       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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章