1、A2W和W2A
在《Window核心编程》,多字节和宽字节之间转换比较麻烦的,MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。那么使用ATL的一个很好的字符串的转换宏:A2W和W2A。
一下示例都是在Unicode编码方式下进行编写。
(1)A2W的用法:多字节转宽字节
USES_CONVERSION;CString tmpStr;char*LineChar="fdsfdsa";const WCHAR * cLineChar = A2W(LineChar);tmpStr=cLineChar;
(2)W2A的用法:宽字节转多字节
USES_CONVERSION;CString tmpStr;WCHAR* LineChar="fdsfdsa";const char* cLineChar = W2A(LineChar);
2、A2T和T2A
(1)A2T的用法:char* ==> CString
USES_CONVERSION;char * pChar="char to cstring";CString cTemp=A2T(pChar);//上面代码可以按照下面这样写CString cTemp; //不能在声明时赋值,会报错char* pChar = "1111";cTemp = pChar;
(2)T2A的用法:CString ==> char*
USES_CONVERSION;CString cTemp =_T("char to cstring");char * pChar=T2A(pChar);
char、TCHAR转换CString
TransCStringToTCHAR
///************************************************************************* 函数: 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;}
TCHAR2Char
/************************************************************************* 函数: TCHAR2Char* 描述:将TCHAR* 转换为 char** 日期:************************************************************************/char* TCHAR2char(TCHAR* tchStr){int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度char* chRtn = new char[iLen+1]wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值return chRtn;}
char2tchar
/************************************************************************* 函数: 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
/************************************************************************* 函数: 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;}
