歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> CString類型轉char類型出現中文亂碼問題

CString類型轉char類型出現中文亂碼問題

日期:2017/3/1 9:30:18   编辑:Linux編程

一般來說CString類型的變量具有很強的操作性,但有時為了使用某些c函數,必須將CString類型的變量轉換為char數組類型。關於CString轉char的方法,網上查了查,發現大都沒介紹清楚,這裡寫出來做個小結,加深下印象。

為完成他們之間的轉換,首先得說明一下他們所占的內存大小。CString屬於所謂的寬字符集,占一個字符占兩個字節; char類型屬於窄字符集,一個char字符占一個字節。故他們之間的轉換涉及到字節大小的轉換。另一方面MFC中Ctring,默認采用unicode編碼,而char采用ansi編碼,兩種編碼中單個字符占的存儲大小也是不同的。

將CString轉char,會用到一個函數 WideCharToMultiByte, 其實unicode與utf-8的互轉,unicode與ansi的互轉,均可以利用此函數完成,該函數的原型為

int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr,int cchMultiByte, LPCSTR lpDefaultStr, LPBOOL lpUsedDefaultChar);

該函數的參數介紹就不說了,多看幾次就記住了。CString變量中有中文等多字節字符,就要注意CodePage的類型,如果要寫出到文件,還要注意轉換的編碼和文件的編碼一致,不然打開仍然亂碼。下面貼出簡短代碼

1 CString tmp(_T("程序猿")); // 待轉換CString變量
2 wchar_t *ptr;
3 char buf[16]; // 目標存儲空間
4
5 ptr=tmp.GetBuffer(tmp.GetLength()*sizeof(wchar_t));
6 WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);

Copyright © Linux教程網 All Rights Reserved