C++中enum与字符串或CString互相转换的方法

        C++中没有专门为enum与字符串或CString互相转换的直接方法,但是工作中会常遇到相互转换的场景。下面介绍一种自己实现的方法,首先得定义一个enum类型,同时,定义一个与之对应的字符串类型,然后,可以相互转换了。

enum E_ANIMAL {
    E_ANIMAL_EAGLE = 0,
	E_ANIMAL_MAGPIE,
	E_ANIMAL_PIG,
	E_ANIMAL_CARP,
	E_ANIMAL_END
};

const CString ANIMAL[] = {
    "E_ANIMAL_EAGLE",
	"E_ANIMAL_MAGPIE",	
	"E_ANIMAL_PIG",
	"E_ANIMAL_CARP",
    "E_ANIMAL_END"
};

bool fnConverCStringToEnum(const CString csParam,E_ANIMAL &eName)
{
	CString csAnimalName;
	int iCount = 0;

	eName = E_ANIMAL_END;
	csAnimalName = csParam;
	iCount = sizeof(ANIMAL) / sizeof(ANIMAL[0]);
	for(int i=0;i<iCount;i++)
	{
	    if(0 == csAnimalName.CompareNoCase(ANIMAL[i]))
		{
			eName = E_ANIMAL(i);
			break;
		}
		else
		{
			continue;
		}
		if(E_ANIMAL_END == eName)
		{
			return false;
		}
	}
	cout << "eName is: " << eName << endl;

	return true;
}

bool fnConverEnumToCString(const E_ANIMAL eParam,CString &csName)
{
	E_ANIMAL eTemp = E_ANIMAL_END;
	int idx = 0;

	if(eParam > E_ANIMAL_END)
	{
		return false;
	}
	eTemp = eParam;
	idx = static_cast<enum>(eTemp);
	csName = ANIMAL[idx];
	cout << "csName is: " << csName.GetBuffer(0) << endl;
	return true;
}


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		// TODO: code your application's behavior here.
		CString csAnimalName;
		E_ANIMAL eAnimalName;
        if(!fnConverEnumToCString(E_ANIMAL_CARP,csAnimalName))
		{
			return false;
		}
		if(!fnConverCStringToEnum("E_ANIMAL_CARP",eAnimalName))
		{
			return false;
		}
		cout << "csAnimalName is: " << csAnimalName.GetBuffer(0) << endl;
		cout << "eAnimalName is: " << eAnimalName << endl;
	}

	return nRetCode;
}


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值