1. 程式人生 > >MFC中Unicode與多位元組編碼中遇到的CString與char或char*的轉化問題

MFC中Unicode與多位元組編碼中遇到的CString與char或char*的轉化問題

博主在MFC初期是遇到了一個初學MFC的人很多都會遇到的一個基本問題:

  就是Unicode或多位元組字符集下CString和Char的轉化問題。其實這種問題解決的方式很簡單,兩種基本形式記住即可:

1.unicode下,轉換字串形式為_T("HelloWorld");

2.MBCS下,轉換字串的形式為"HelloWorld"


多位元組字符集 (MBCS) 是一種替代 Unicode 以支援無法用單位元組表示的字符集(如日文和中文)的方法。為國際市場程式設計時應考慮使用 Unicode 或 MBCS,或使程式能夠通過更改開關來生成支援兩種字符集之一的程式。

最常見的 MBCS 實現是雙位元組字符集 (DBCS)。一般來說,Visual C++(尤其是 MFC)完全支援 DBCS。

有關示例,請參見 MFC 原始碼檔案。

對於語言使用大字符集的市場所使用的平臺,代替 Unicode 的最佳方法是 MBCS。MFC 通過使用可國際化的資料型別和 C 執行時函式來支援 MBCS。您也應在自己的程式碼中這樣操作。

在 MBCS 下,字元被編碼為單位元組或雙位元組。在雙位元組字元中,第一個位元組(即前導位元組)表示它和下一個位元組將被解釋為一個字元。第一個位元組來自留作前導位元組的程式碼範圍。哪個範圍的位元組可以用作前導位元組取決於所使用的內碼表。例如,日文內碼表 932 使用 0x81 到 0x9F 範圍內的位元組作為前導位元組,而朝鮮語內碼表 949 則使用其他範圍的位元組。

MFC中,Unicode和多位元組字符集下 CString和char的轉化

unicode下

得到CString的長度
CString strtest=_T("caoeeks");
wcslen(strtest);
wcslen(_T("123"));

多位元組字符集下
strlen(CString str);

CString轉TCHAR
CString str = "aklsdjf ";
TCHAR* tch = (LPTSTR)(LPCTSTR)str;

lstrcpy(data, abc);
sprintf(data, "%s ", (LPCTSTR) abc);
sprintf(data, abc);


char* 和 cstring的轉換

char * charP;
CString strP;
(1)char* -> cstring
strP = CString(charP)

(2)cstring -> char*
WideCharToMultiByte(CP_OEMCP,0,(LPCTSTR)strP,-1,charP,260,0,false);

CString和 int的轉換
CString strNum=...
int value = _ttoi(static_cast<LPCTSTR>(strNum));
或者
int value = _ttoi(strNum);

多位元組字符集下

Cstring轉化為char

轉化成陣列:

Cstring str=”convert”;

char char_str [512];

strncpy_s(char_str,(LPCTSTR)str_sum,sizeof(char_str));

轉化成char指標:

char * ch_a =(char*)str.GetBuffer(str.GetLength());

char轉化為Cstring

Cstring str;

char szBuff[2048];

str.Format("%s",szBuff);

CString 轉 int :

n=atoi(str);

以上是我複製別人的部落格而來,覺得很有意義,就和大家分享,因為這個問題在我做MFC與資料庫連結的時候,經常會出現字元不能轉化,從資料庫中讀取資料然後顯示的時候出現亂碼現象。