CString和string和TCHAR数组之间的转换
控制台上使用MFC的CString的环境配置问题
源代码
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<afx.h>
#include<string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//CString 使用 TCHAR 的数值
TCHAR m_buf[100] = _T("Hello");
CString str;
str.Format(_T("%s"),m_buf);
printf("m_buf 转化为 str:%S!\n", str.GetBuffer());
//TCHAR 使用 CSTring 的数值
#ifdef UNICODE
char const * format = "m_str 转化为 buf:%ls!\n";
#else
char const * format = "m_str 转化为 buf:%s!\n";
#endif
CString m_str = _T("World");
TCHAR buf[20];
_tcscpy(buf, m_str);
printf(format, buf);
//TCHAR 数组 转化为 string
TCHAR T_str[100] = _T("Hello");
int iLen = WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL);
char chRtn[100];
WideCharToMultiByte(CP_ACP, 0, str, -1, chRtn, iLen, NULL, NULL);
std::string strstr = chRtn;
printf("T_str 转化为 strstr:%s!\n", strstr.c_str());
//string 转化为 TCHAR数组
string m_strName = "World";
TCHAR m_tcharName[100];
#ifdef UNICODE
_stprintf_s(m_tcharName, _countof(m_tcharName), _T("%S"), m_strName.c_str());//%S宽字符
#else
_stprintf_s(m_tcharName, sizeof(m_tcharName), _T("%s"), m_strName.c_str());//%s单字符
#endif
printf("m_strName 转化为 m_tcharName:%ls!\n", m_tcharName);
//string 转化为 CString
CString cs_Str;
string s_Str = "string_Str";
cs_Str = s_Str.c_str();
printf("cs_Str 转化为 s_Str:%S\n",cs_Str.GetBuffer());
//CString 转化为 string
CString CS_Str = _T("cs_STR");
string str_Str = (LPCSTR)(CStringA)(CS_Str);
printf("CS_Str 转化为 str_Str:%S\n",str_Str.c_str());
system("pause");
return 0;
}
总结
这里没有过多的考虑宽字符和单字符编码的问题,代码均可运行。写这个帖子的目的也是最近项目有所遇到,记录下来以便以后使用。欢迎小伙伴们交流指导。