Unicode 下 CString 与 char * 转换在 Visual C++.NET2005 中,默认的字符集形式是 Unicode ,但在 等工程中,默认的字符集形式是多字节字符集( MBCS : Multi-Byte Character Set ) ,这样导致在 中非常简单实用的各类字符操作和函数在 VS2005 环境下运行时会报各种各样的错误, 这里总结了在 Visual C++.NET200 5 环境中 Unicod e 字符集下 CStrin g和 char * 之间相互转换的几种方法, 其实也就是 Unicode 字符集与 MBCS 字符集转换。(1) 、 Unicode 下 CString 转换为 char * 方法一:使用 API : WideCharToMultiByte 进行转换 CString str= _T("D:\\ 校内项目\\"); // 注意:以下 n和 len 的值大小不同,n 是按字符计算的, len 是按字节计算的 intn= (); //n= 14, len = 18 // 获取宽字节字符的大小,大小是按字节计算的 int len= WideCharToMultiByte(CP_ACP,0,str,(),NULL,0,NULL,NULL); // 为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 char * pFileName = new char[len+1]; // 以字节为单位// 宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP,0,str,(),pFileName,len,NULL,NULL); pFileName[len+1] = '\0'; // 多字节字符以'\0' 结束方法二:使用函数: T2A 、 W2A CString str= _T("D:\\ 校内项目\\"); // 声明标识符 USES_CONVERSION; // 调用函数, T2A 和 W2A 均支持 ATL 和 MFC 中的字符转换 char * pFileName = T2A(str); //char * pFileName = W2A(str); // 也可实现转换注意:有时候可能还需要添加引用#include <> (2) 、 Unicode 下 char * 转换为 CString 方法一:使用 API : MultiByteToWideChar 进行转换 char * pFileName = "D:\\ 校内项目\\"; // 计算 char * 数组大小,以字节为单位,一个汉字占两个字节 int charLen = strlen(pFileName); // 计算多字节字符的大小,按字符计算。 int len = MultiByteToWideChar(CP_ACP,0,pFileName,charLen,NULL,0); // 为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小 TCHAR *buf = new TCHAR[len + 1]; // 多字节编码转换成宽字节编码 MultiByteToWideChar(CP_ACP,0,pFileName,charLen,buf,len); buf[len] = '\0'; // 添加字符串结尾,注意不是 len+1 //将 TCHAR 数组转换为 CString CString pWideChar; (buf); // 删除缓冲区 delete []buf; 方法二:使用函数: A2T 、 A2W char * pFileName = "D:\\ 校内项目\\"; USES_CONVERSION; CString s= A2T(pFileName); //CString s= A2W(pFileName); 方法三:使用_T 宏,将字符串转换为宽字符// 多字节字符集,在 vc6 和 vc7 种可以编译通过的语句,但 VS2005 不能通过, 默认为 Unicode 字符集//AfxMessageBox(" 加载数据失败",0); // 书写代码使用 TEXT("") 或_T("") , 文本在 UNICODE 和非 UNICODE 程序里都通用 AfxMessageBox(_T(" 加载数据失败"),0); 注意: 直接转换在基于 MBCS 的工程可以, 但在基于 Unicode 字符集的工程中直接转换是不可行的, CString 会以 Unicode 的形式来保存数据,强制类
Unicode下CString与char_转换 来自淘豆网m.daumloan.com转载请标明出处.