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