欧美三级电影完整|亚洲一二三四久久|性爱视频精品一区二区免费在线观看|国产精品啪啪视频|婷婷六月综合操人妻视频网站|99爱免费视频在线观看|美女一级片在线观看|北京熟女88av|免费看黄色A级电影|欧美黄色毛片儿

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

2023-04-12



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


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


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


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


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


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


//為多字節(jié)字符數(shù)組申請空間,數(shù)組大小為按字節(jié)計(jì)算的寬字節(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)項(xiàng)目\\QQ.bmp");


//聲明標(biāo)識(shí)符
USES_CONVERSION;


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


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


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


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


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


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


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


//為寬字節(jié)字符數(shù)組申請空間,數(shù)組大小為按字節(jié)計(jì)算的多字節(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)項(xiàng)目\\QQ.bmp";


USES_CONVERSION;
CString s = A2T(pFileName);


//CString s = A2W(pFileName);


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


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


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


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


本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>

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