科技

2012年1月20日 星期五

[MFC]CString 轉換到 char

最近在做MFC相關的東西

遇到CString to char真的很麻煩


方法1


size_t i;

char str[STR_LEN];

// STR_LEN 大小自己決定, 其實可以改宣告為 char*, 然後在下面取得 cStr 長度之後再 allocate 相對應的大小
int sizeOfString = (cStr.GetLength() + 1); // 取得 cStr 長度, +1 for '\0'.

// LPTSTR 型態是 wchar_t*, 一個 element 2 bytes 大小.
LPTSTR pStrTmp = new TCHAR[sizeOfString];
_tcscpy_s(pStrTmp, sizeOfString, cStr); // 用 _tcscpy_s 複製 cStr

// str 型態是 char, 一個 element 1 byte 大小, 用 wcstombs_s 轉換 pStrTmp.
wcstombs_s(&i, str, 16, pStrTmp, 16);



方法1 筆者在使用時發生trace 不到 wcstombs_s來源 筆者的編輯環境為VS2005

因此將 wcstombs_s 轉用 wcstombs

改寫為 wcstombs

其中內容: wcstombs(char *mbstr, const wchar_t *wcstr, size_t count);

mbstr 為CString轉換後欲存放的char變數,方法1中的str

wcstr為方法1中的pStrTmp

size_t count 轉換的size

這樣就可以順利轉換了

方法2 其實也算是將方法1改寫 改成以function來表達 程式碼如下



char* CRadiotestDlg::CStringToChar(CString cStr)

{

char str[40];

int sizeOfString = (cStr.GetLength() + 1);

LPTSTR pStrTmp = new TCHAR[sizeOfString];

_tcscpy_s(pStrTmp, sizeOfString, cStr);

wcstombs(str, pStrTmp,sizeOfString);

return str;

}

改寫成function好處是可重複利用 較為便利

沒有留言:

張貼留言