【语言-C++】std:string 转换代码

stringConversion.h

#pragma once
#include <string>
using namespace std;
#define ZERO_FLOAT								0.000002

namespace stringCon{
	string GBK2UTF8(const string& strGBK);
	string UTF82GBK(const string& strUtf8);
	string Constring(float value);
	string Constring(double value);
	string Constring(int value);
	string ConstringChar(int value);
	string Constring(DWORD value);
	string Constring(WORD value);
	string Constring(const char* pStr);
	string Constring(const CString strSrc);//mfq 2014.05.29
	string Constring(char cValue);

	void OutputDebugstring(string str);

	void Sample();
};

stringConversion.cpp

#include "StdAfx.h"
#include "stringConversion.h"


namespace stringCon{
	string GBK2UTF8(const string& strGBK) 
	{
		int len=MultiByteToWideChar(CP_ACP, 0, (LPCSTR)strGBK.c_str(), -1, NULL,0);
		unsigned short * wszUtf8 = new unsigned short[len+1];
		memset(wszUtf8, 0, len * 2 + 2);
		MultiByteToWideChar(CP_ACP, 0, (LPCSTR)strGBK.c_str(), -1, (LPWSTR)wszUtf8, len);

		len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, NULL, 0, NULL, NULL); 
		char *szUtf8=new char[len + 1];
		memset(szUtf8, 0, len + 1);
		WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);

		string resultStr(szUtf8);

		delete[] szUtf8;
		delete[] wszUtf8;

		return resultStr;
	}

	string UTF82GBK(const string& strUtf8)
	{
		int len=MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8.c_str(), -1, NULL,0);
		unsigned short * wszGBK = new unsigned short[len+1];
		memset(wszGBK, 0, len * 2 + 2);
		MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8.c_str(), -1, (LPWSTR)wszGBK, len);

		len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL); 
		char *szGBK=new char[len + 1];
		memset(szGBK, 0, len + 1);
		WideCharToMultiByte (CP_ACP, 0, (LPCWSTR)wszGBK, -1, szGBK, len, NULL,NULL);

		string resultStr(szGBK);
		delete[] szGBK;
		delete[] wszGBK;

		return resultStr;
	}

	string Constring(DWORD value)
	{
		char buffer[64] = {0};
		sprintf_s(buffer, "%u", value);

		return Constring(buffer);
	}
	std::string Constring( WORD value )
	{
		char buffer[32] = {0};
		sprintf_s(buffer, "%u", value);
		return Constring(buffer);
	}
	string Constring(int value)
	{
		char buffer[64] = {0};
		sprintf_s(buffer, "%d", value);

		return Constring(buffer);
	}

	std::string ConstringChar( int value )
	{
		char buffer[64] = {0};
		sprintf_s(buffer, "%c", value);

		return Constring(buffer);
	}

	string Constring(const char* pStr)
	{
		return !pStr ? "" : string(pStr);
	}
	string Constring(const CString strSrc)
	{
		//需要添加comdef.h头文件已加入到stdafx中
		string resultstr;
#ifdef _UNICODE
		USES_CONVERSION;
		// 		string tempstr=(CW2A((LPCTSTR)strSrc));
		// 		resultstr=tempstr;
		resultstr=T2A(strSrc.GetString());
#else
		resultstr=strSrc.GetBuffer(0);
#endif
		return resultstr;
	}
	string Constring(double value)
	{
		return Constring((float)value);
	}

	string Constring(float value)
	{//先这样,以后再解决
		//int nValue = (value * 100000 + 0.5);
		//value = nValue / 100000.0f;
		//value = -0.6999999f;

		BOOL bNegtive = (value < -ZERO_FLOAT);

		if(bNegtive == TRUE)
			value = - value;


		float tempvalue = (value + 0.5f);
		float tempvalue1 = (value * 10.0f +0.5f) / 10.0f;
		float tempvalue2 = (value * 100.0f  +0.5f) / 100.0f;
		float tempvalue3 = (value * 1000.0f +0.5f) / 1000.0f;

		char buffer[64] = {0};

		if(fabs(tempvalue - value) < ZERO_FLOAT)
		{
			sprintf_s(buffer, "%d",(int)value);
		}
		else if(fabs(tempvalue1 - value) < ZERO_FLOAT)
		{
			sprintf_s(buffer, "%0.1f", value + ZERO_FLOAT);
		}
		else if(fabs(tempvalue2 - value) < ZERO_FLOAT)
		{
			sprintf_s(buffer, "%0.2f", value + ZERO_FLOAT);
		}
		else if(fabs(tempvalue3 - value) < ZERO_FLOAT)
		{
			sprintf_s(buffer, "%0.3f", value + ZERO_FLOAT);
		}
		else
		{
			sprintf_s(buffer, "%f", value);
		}

		string caption(buffer);

		if(bNegtive == TRUE)
			caption = string("-") + caption;

		return caption;
	}

	string Constring(char cValue)
	{
		char buffer[64] = {0};
		sprintf_s(buffer, "C", cValue);

		return string(buffer);
	}



	void Sample()
	{
		string tmp;
		tmp = Constring(1.0f);				OutputDebugstring(tmp );
		tmp = Constring(-6.999999);			OutputDebugstring(tmp );
		tmp = Constring(0x0C8E);			OutputDebugstring(tmp );
		tmp = Constring(0x7FFFFFFF);		OutputDebugstring(tmp );
		tmp = Constring("少莫千华");			OutputDebugstring(tmp );
		tmp = Constring(19900823);			OutputDebugstring(tmp );
		tmp = Constring(19900823l);			OutputDebugstring(tmp );
		tmp = ConstringChar(8482);			OutputDebugstring(tmp );
		tmp = ConstringChar(8481);			OutputDebugstring(tmp );
		tmp = ConstringChar(8451);			OutputDebugstring(tmp );
		tmp = ConstringChar(8480);			OutputDebugstring(tmp );
		tmp = ConstringChar(8457);			OutputDebugstring(tmp );
		tmp = ConstringChar(8471);			OutputDebugstring(tmp );
		tmp = ConstringChar(169);			OutputDebugstring(tmp );
		tmp = ConstringChar(174);			OutputDebugstring(tmp );
		for (int i = 13184;i<=13277 ;i++)
			tmp = ConstringChar(i);			//OutputDebugString(tmp + L"\n");
	/*	tmp = ConCStringTabNumber(10);			OutputDebugString(tmp + L"开始\n");
		tmp = ConCStringScoreCap(-100.0f);			OutputDebugString(tmp + L"\n");
		tmp = ConCStringScoreCap(99.56f);			OutputDebugString(tmp + L"\n");*/
	}

	void OutputDebugstring( string str )
	{
		const char* pStr = str.c_str();
		CString strResult = _T("");
#ifdef _UNICODE
		USES_CONVERSION;
		strResult.Format(_T("%s"), A2W(pStr));
#else
		strResult.Format(_T("%s"), (pStr));
#endif
		OutputDebugString(strResult);
		OutputDebugString(_T("\n"));
	}

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值