亚洲欧美日韩熟女|做爱高潮视频网址|国产一区二区三级片|国产Av中文字幕www.性色av|亚洲婷婷永久免费|国产高清中文字幕|欧美变态网站久re视频精品|人妻AV鲁丝第一页|天堂AV一区二区在线观看|综合 91在线精品

Unicode字符集下CString與char *轉(zhuǎn)換

2023-04-12



在Visual C++.NET2005中,默認的字符集形式是Unicode,但在VC6.0等工程中,默認的字符集形式是多字節(jié)字符集(MBCS:Multi-Byte Character Set),這樣導致在VC6.0中非常簡單實用的各類字符操作和函數(shù)在VS2005環(huán)境下運行時會報各種各樣的錯誤,這里總結(jié)了在Visual C++.NET2005環(huán)境中Unicode字符集下CString和char *之間相互轉(zhuǎn)換的幾種方法,其實也就是Unicode字符集與MBCS字符集轉(zhuǎn)換。


1、Unicode下CString轉(zhuǎn)換為char *


方法一:使用API:WideCharToMultiByte進行轉(zhuǎn)換


CString str = _T("D:\\校內(nèi)項目\\QQ.bmp");


//注意:以下n和len的值大小不同,n是按字符計算的,len是按字節(jié)計算的
int n = str.GetLength(); // n = 14, len = 18


//獲取寬字節(jié)字符的大小,大小是按字節(jié)計算的
int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);


//為多字節(jié)字符數(shù)組申請空間,數(shù)組大小為按字節(jié)計算的寬字節(jié)字節(jié)大小
char * pFileName = new char[len+1]; //以字節(jié)為單位


//寬字節(jié)編碼轉(zhuǎn)換成多字節(jié)編碼
WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);


pFileName[len+1] = '\0';


方法二:使用函數(shù):T2A、W2A


CString str = _T("D:\\校內(nèi)項目\\QQ.bmp");


//聲明標識符
USES_CONVERSION;


//調(diào)用函數(shù),T2A和W2A均支持ATL和MFC中的字符轉(zhuǎn)換
char * pFileName = T2A(str);
//char * pFileName = W2A(str); //也可實現(xiàn)轉(zhuǎn)換


注意:有時候可能還需要添加引用#include


2、Unicode下char *轉(zhuǎn)換為CString


方法一:使用API:MultiByteToWideChar進行轉(zhuǎn)換


char * pFileName = "D:\\校內(nèi)項目\\QQ.bmp";


//計算char *數(shù)組大小,以字節(jié)為單位,一個漢字占兩個字節(jié)
int charLen = strlen(pFileName);


//計算多字節(jié)字符的大小,按字符計算。
int len = MultiByteToWideChar(CP_ACP,0,pFileName,charLen,NULL,0);


//為寬字節(jié)字符數(shù)組申請空間,數(shù)組大小為按字節(jié)計算的多字節(jié)字符大小
TCHAR *buf = new TCHAR[len + 1];


//多字節(jié)編碼轉(zhuǎn)換成寬字節(jié)編碼
MultiByteToWideChar(CP_ACP,0,pFileName,charLen,buf,len);


buf[len] = '\0'; //添加字符串結(jié)尾,注意不是len+1

//將TCHAR數(shù)組轉(zhuǎn)換為CString
CString pWideChar;
pWideChar.Append(buf);


//刪除緩沖區(qū)
delete []buf;


方法二:使用函數(shù):A2T、A2W


char * pFileName = "D:\\校內(nèi)項目\\QQ.bmp";


USES_CONVERSION;
CString s = A2T(pFileName);


//CString s = A2W(pFileName);


方法三:使用_T宏,將字符串轉(zhuǎn)換為寬字符


//多字節(jié)字符集,在vc6和vc7種可以編譯通過的語句,但VS2005不能通過,默認為Unicode字符集
//AfxMessageBox("加載數(shù)據(jù)失敗",0);


//書寫代碼使用TEXT("")或_T(""),文本在UNICODE和非UNICODE程序里都通用
AfxMessageBox(_T("加載數(shù)據(jù)失敗"),0);


注意:直接轉(zhuǎn)換在基于MBCS的工程可以,但在基于Unicode字符集的工程中直接轉(zhuǎn)換是不可行的,CString會以Unicode的形式來保存數(shù)據(jù),強制類型轉(zhuǎn)換只會返回第一個字符。


本文僅代表作者觀點,版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。

免責聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com