CString和string和TCHAR数组之间的转换

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;
}


总结

这里没有过多的考虑宽字符和单字符编码的问题,代码均可运行。写这个帖子的目的也是最近项目有所遇到,记录下来以便以后使用。欢迎小伙伴们交流指导。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值