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與資料庫連結的時候,經常會出現字元不能轉化,從資料庫中讀取資料然後顯示的時候出現亂碼現象。