CString 轉 char *

vs默認unicode,如需要修改:屬性->常規->字符集

以下是關於WideCharToMultiByte改變字寬的倆例子


如果你不是unicode環境,
char* 不是用CString填進去的,應該是這樣
CString szParA;
CString szParB;
假設接口是:
fun(char* ParA, char* parB);
那麼應該寫作:
fun(szParA.GetBuffer(0), szParB.GetBuffer(0);
 
如果是unciode的編譯環境
CString szParA;
CString szParB;
 
假設接口是:
fun(char* ParA, char* parB);
 
那麼需要先轉換爲多字節字符串,然後纔可以作爲參數填寫進去:
如果是wchar_t轉換爲char接口的可以用這個函數:
BOOL MyWideChar_tToMultiByte(LPTSTR lpcwszStr, LPSTR lpOut,INT nOutSize)
{
    DWORD dwMinSize = 0;
    dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
 
    if(dwMinSize > nOutSize)
    {
        return FALSE;
    }
    else
    {
        WideCharToMultiByte(CP_OEMCP,NULL,lpInt,-1,lpOut,nOutSize,NULL,FALSE);
        return TRUE;
    }
}
 
所以兩個參數需要這麼轉化:
char bufA[512];//多申請點,免得溢出
char bufB[512];
 
MyWideChar_tToMultiByte(szParA.GetBuffer(0), bufA, sizeof(bufA));
MyWideChar_tToMultiByte(szParB.GetBuffer(0), bufB, sizeof(bufB));
 
經過轉換後,就可以作爲char*類的替代品bufA、bufB作爲參數填寫進去了,如下:
fun(bufA, bufB);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章