Chinaunix首页 | 论坛 | 博客
  • 博客访问: 698488
  • 博文数量: 112
  • 博客积分: 2486
  • 博客等级: 大尉
  • 技术积分: 1541
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-14 18:30
文章分类

全部博文(112)

文章存档

2012年(5)

2011年(48)

2010年(26)

2009年(33)

我的朋友

分类: LINUX

2009-12-14 18:59:28

今天遇到一个难题,以前一直都是从TCHAR *转换到CString,今天需要CString 转换成TCHAR *的方法,找了一下MSDN文档,没有发现有现成的函数可以用。后来上网搜索了一下,方法还不少。如下几种:

方法一,使用强制转换。例如:

CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。例如:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数
-------------------------------------------------------------------

我尝试了后面两种,都能成功,最后我还是选用了简单的第二种方法,因为采用第三种方法的话,需要用GetBuffer();函数,而该函数的使用需要非常的小心谨慎。

源码如下:

/**********
检查输入的手机型号是否合法。规定手机型号以CoolPad_开始。合法则返回TRUE,否则返回FALSE
***********/
BOOL CAutoBuildConfigDlg::CheckMobileName(CString strMobileName)
{
 wchar_t * pdest;
 CString strMobileName_temp;
 strMobileName_temp = strMobileName;
 TCHAR strCOOLPAD[] = L"COOLPAD_";

 LPTSTR lpsz =  new TCHAR[strMobileName_temp.GetLength()+1];
 wcsncpy_s(lpsz,(strMobileName_temp.GetLength()+1),strMobileName_temp, (strMobileName_temp.GetLength()+1));

 errno_t err;
 err = _wcsupr_s(lpsz,strMobileName_temp.GetLength()+1);//因为没有找到不区分大小写的查找子字符串的函数,所以决定转换成大写然后进行比较。
 pdest = wcsstr( lpsz,strCOOLPAD );

 if( pdest != NULL )
 {
   return TRUE;
 }
 else
 {
  return FALSE;
 }
}

阅读(9029) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~