|
CString中存儲(chǔ)的字符的數(shù)據(jù)類型為wchar_t類型。
一、CString轉(zhuǎn)換為char *
(1)方法一:使用wcstombs()
- #include <iostream>
- using namespace std;
- #include <atlstr.h>
-
- int main()
- {
- CString str = L"liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)";
- wchar_t *pWChar = str.GetBuffer(); //獲取str的寬字符用數(shù)組保存
- str.ReleaseBuffer();
-
- int nLen = str.GetLength(); //獲取str的字符數(shù)
- char *pChar = new char[nLen * 2 + 1];
- memset(pChar, 0, nLen * 2 + 1);
- int rtnVal = (int)wcstombs(pChar, pWChar, nLen * 2 + 1); //寬字符轉(zhuǎn)換為多字節(jié)字符
-
- cout<<pChar<<endl;
-
- delete[] pChar;
- return 0;
- }
輸出結(jié)果:

注意到結(jié)果沒(méi)有輸出“計(jì)算機(jī)網(wǎng)絡(luò)”,那是因?yàn)閣cstombs()不支持中文。
(2)方法二:使用WideCharToMultiByte();
- #include <iostream>
- using namespace std;
- #include <atlstr.h>
-
- int main()
- {
- CString str = L"liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)";
- int n = str.GetLength(); //獲取str的字符數(shù)
- int len = WideCharToMultiByte(CP_ACP, 0, str, n, NULL, 0, NULL, NULL); //獲取寬字節(jié)字符的大小,大小是按字節(jié)計(jì)算的
- char *pChar = new char[len + 1]; //以字節(jié)為單位
- WideCharToMultiByte(CP_ACP, 0, str, n, pChar, len, NULL, NULL); //寬字節(jié)編碼轉(zhuǎn)換成多字節(jié)編碼
- pChar[len + 1] = '\0'; //多字節(jié)字符以'\0'結(jié)束
- cout<<pChar<<endl;
- delete[] pChar;
- return 0;
- }
輸出結(jié)果:

二、char *轉(zhuǎn)換為CString
(1)方法一:使用_T()宏
- CString str = _T("liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)");
(2)方法二:使用API的函數(shù)MultiByteToWideChar()
- #include <iostream>
- using namespace std;
- #include <atlstr.h>
- #include <stdio.h>
- #include <string.h>
-
- int main()
- {
- //將char數(shù)組轉(zhuǎn)換為wchar_t數(shù)組
- char *pChar = "liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)";
- int charLen = strlen(pChar); //計(jì)算pChar所指向的字符串大小,以字節(jié)為單位,一個(gè)漢字占兩個(gè)字節(jié)
- int len = MultiByteToWideChar(CP_ACP, 0, pChar, charLen, NULL, 0); //計(jì)算多字節(jié)字符的大小,按字符計(jì)算
- wchar_t *pWChar = new wchar_t[len + 1]; //為寬字節(jié)字符數(shù)申請(qǐng)空間,
- MultiByteToWideChar(CP_ACP, 0, pChar, charLen, pWChar, len); //多字節(jié)編碼轉(zhuǎn)換成寬字節(jié)編碼
- pWChar[len] = '\0';
-
- //將wchar_t數(shù)組轉(zhuǎn)換為CString
- CString str;
- str.Append(pWChar);
-
- delete[] pChar;
- delete[] pWChar;
- return 0;
- }
在str.Append(pWChar);這條語(yǔ)句處設(shè)斷點(diǎn),調(diào)試運(yùn)行,可查看到str的內(nèi)容為"liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)"。
(三)方法三:使用A2T()、A2W()
- char *pChar = "liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)";
- USES_CONVERSION;
- CString str = A2T(pChar);
- char *pChar = "liuxijiao計(jì)算機(jī)網(wǎng)絡(luò)";
- USES_CONVERSION;
- CString str = A2W(pChar);
|