在使用fprintf向文本中寫字符串時(shí),只能寫入第一個(gè)字符,需要將CString轉(zhuǎn)換成char *,現(xiàn)總結(jié)在UniCode字符集下的字符轉(zhuǎn)換。
1.CString轉(zhuǎn)char
方法1:T2A、W2A
CString str = _T("");
//聲明標(biāo)識(shí)符
USES_CONVERSION;
//T2A和W2A均支持ATL和MFC中的字符轉(zhuǎn)換
char * pFileName = T2A(str);
方法2:WideCharToMultiByte
CString str = _T("");
int n = str.GetLength();? ??
//獲取寬字節(jié)字符的大小,大小是按字節(jié)計(jì)算的
int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);
//為多字節(jié)字符數(shù)組申請(qǐng)空間,數(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';//多字節(jié)字符以'\0'結(jié)束
2.char轉(zhuǎn)CString
方法1 :A2T、A2W
char * pFileName = "";
USES_CONVERSION;
CString s = A2T(pFileName);
方法2 :MultiByteToWideChar
char * pFileName = "";
//計(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ù)組申請(qǐng)空間,數(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;