今天写一个MFC的小工程,遇到了需要CString对cosnt char*的转换,查阅了网上好多资料,牛们的留言,
可是好多都不能用,之前碰到过字符处理问题,还蛮顺利解决的,今天纠结了好久,就写个贴给遇到同样问题
的朋友.
实例:需要把一个CString的路径字符串转化为const char*.(编码环境unicode).
方法一:
- void CDataStore::LoadFile(CString FileName)
- {
- FILE *Fp;
- USES_CONVERSION;
- const char* Str = T2A(FileName.GetBuffer());
- if( ( Fp = fopen( Str, "r" ) ) == NULL )
- {
- return ;
- }
- }
由于在unicode环境下,通过GetBuffer读取字符串缓冲区时,读入的时宽字节指针,
于是需要转换为单字节指针,这就可以通过系统宏T2A(W2A)来实现,不要忘了
USES_CONVERSION;...
方法二:
- void CDataStore::LoadFile(CString FileName)
- {
- FILE *Fp;
- char Str[1024];
- WideCharToMultiByte(CP_ACP,0,FileName,-1,Str,1024,NULL,NULL);
- LPTSTR Str = FileName.GetBuffer();
- if( ( Fp = fopen( Str, "r" ) ) == NULL )
- {
- return ;
- }
可以通过系统函数WideCharToMultiByte()处理短字节和宽字节的转换,网上说的
(LPCTSTR)等的强制转换在unicode下是不行的,他不是const char*而是const wchar_t*
所以不能使用强制转换来实现CString 到 const char *!
以上代码在VS2010中编译运行通过!