UniCode下字符常见的一些问题(二)

Unicode下字符转换
.
  TCHAR是一种字符串类型,它让你在以MBCS和Unicode来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符

if def UNICODE

 TCHAR = wchar

else

 TCHAR = char

  所以用MBCS来build时,TCHAR是char,使用UNICODE时,TCHAR是wchar_t.至于String,CString他们都是一种封装了字串处理的操作!你可以打开他们的源代码找寻究竟! CString属于VC的类库string是标准C++的类库string.h是C的库函数。

char*、TCHAR*转换CString CString str(*)*

/**********************************************************************    
* 函数: TransCStringToTCHAR    
* 描述:将CString 转换为 TCHAR*    
* 日期:   
***********************************************************************/    
TCHAR* CPublic::CString2TCHAR(CString &str)      
{      
    int iLen = str.GetLength();      
    TCHAR* szRs = new TCHAR[iLen];      
    lstrcpy(szRs, str.GetBuffer(iLen));      
    str.ReleaseBuffer();      
    return szRs;      
}


/***********************************************************************    
* 函数: THCAR2Char    
* 描述:将TCHAR* 转换为 char*    
* 日期:   
************************************************************************/      
char* CPublic::THCAR2char(TCHAR* tchStr)      
{      
    int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度      
    char* chRtn = new char[iLen+1]      
    wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值      
    return chRtn;      
}     


/************************************************************************  
* 函数: char2tchar 
* 描述:将 char* 转换为 TCHAR* 
* 日期: 
*************************************************************************/  

TCHAR *char2tchar(char *str)  
{  
    int iLen = strlen(str);  
    TCHAR *chRtn = new TCHAR[iLen+1];  
    mbstowcs(chRtn, str, iLen+1);  
    return chRtn;  
}  


/************************************************************************    
* 函数: CString2char    
* 描述:将CString转换为 char*    
* 日期:   
************************************************************************/      
char* CPublic::CString2char(CString &str)      
{      
    int len = str.GetLength();      
    char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的长度中汉字算一个长度      
    memset(chRtn, 0, 2*len+1);      
    USES_CONVERSION;      
    strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));      
    return chRtn;      
}     

typedef ATL::CStringT< wchar_t, StrTraitMFC_DLL< wchar_t > > CStringW;
typedef ATL::CStringT< char, StrTraitMFC_DLL< char > > CStringA;
typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;

**CStringA 转char***

CStringA m_strDeviceTypeName;
char *strName = new char[256];

memset(strName, 0, sizeof(char)*256);
**strncpy_s**(strName, 256, m_strDeviceTypeName, 256);      


**CString 转wchar_t***

CString m_strDeviceUniqueId; 
wchar_t * strName = new wchar_t[256];

memset(strName, 0, sizeof(wchar_t)*256);
**wcsncpy**(strName, m_strDeviceUniqueId, 256);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值