在使用fprintf向文本中寫字符串時呻袭,只能寫入第一個字符艰亮,需要將CString轉(zhuǎn)換成char *橄务,現(xiàn)總結(jié)在UniCode字符集下的字符轉(zhuǎn)換臀栈。
1.CString轉(zhuǎn)char
方法1:T2A、W2A
CString str = _T("");
//聲明標(biāo)識符
USES_CONVERSION;
//T2A和W2A均支持ATL和MFC中的字符轉(zhuǎn)換
char * pFileName = T2A(str);
方法2:WideCharToMultiByte
CString str = _T("");
int n = str.GetLength();? ??
//獲取寬字節(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';//多字節(jié)字符以'\0'結(jié)束
2.char轉(zhuǎn)CString
方法1 :A2T、A2W
char * pFileName = "";
USES_CONVERSION;
CString s = A2T(pFileName);
方法2 :MultiByteToWideChar
char * pFileName = "";
//計算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;