CString与内置类型的转换总结如下
float、int、double->CString
在MFC中可以采用CString内置的函数Format实现,形式如下
CString destination; destination.Format(_T("%??"),source);
%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%f 十进制浮点数(float)
%lf 十进制浮点数(double)
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
example(其他转换类似)
CString str; int number=15; str.Format(_T("%d"),number); //str="15" str.Format(_T("%4d"),number); //str=" 15"(前面有两个空格) str.Format(_T("%.4d"),number); //str="0015"
CString->float、int、double
短整型(int) i = atoi(temp)
长整型(long) l = atol(temp)
浮点(double) d = atof(temp)
example CString temp= "100"; int intResult; intResult= atoi(temp);
以下为UniCode编码中转换
CString->char*
方法1:使用函数 T2A、W2A
CString cstr = _T("testdd你好啊"); //声明标识 USES_CONVERSION; //函数T2A和W2A均支持ATL和MFC中的字符 char * pFileName = T2A(cstr);
方法2:借助string
CString str = _T("D:\\校内项目"); std::string sz2 = CT2A(str.GetBuffer()); //转化为非unicode. str.ReleaseBuffer(); //GetBuffer后需要ReleaseBuffer char * pChar = (char *)sz2.c_str();
方法三:
CString str = _T("testdd你好啊"); int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); char *buf = new char[len + 1]; WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL); //... delete[] buf;
char* ->CString
主要过程为char*->TCHAR->CString
char sText[] = "abcdasd你好啊!"; //计算char *数组大小,以字节为单位,一个汉字占两个字节 int charLen = strlen(sText); //计算多字节字符的大小,按字符计算。 int len = MultiByteToWideChar(CP_ACP, 0, sText, charLen, NULL, 0); //为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小 TCHAR *buf = new TCHAR[len + 1]; //多字节编码转换成宽字节编码 MultiByteToWideChar(CP_ACP, 0, sText, charLen, buf, len); buf[len] = '\0'; //添加字符串结尾,注意不是len+1 //将TCHAR数组转换为CString CString pWideChar; pWideChar.Append(buf); //删除缓冲区 delete[]buf;
或者试用A2T或A2W
char *pChar = "你好啊abc"; USES_CONVERSION; CString cstr = A2T(pChar);
或者如下,可能涉及编码问题
char* pData = "1234"; CString strData(pData);
静态文本直接可以如下:
CString sz1 = _T("test string")
CString->String
CString sz1 = L"abcdasd你好啊!"; std::string sz2 = CT2A(sz1.GetBuffer()); //转化为非unicode. sz1.ReleaseBuffer(); //GetBuffer后需要ReleaseBuffer