今天被MFC的字符集,多字节,双字节,unicode等搞得狠郁闷,于是干脆就整理出一个字符转换的类。
#include "StdAfx.h"
class STring
{
public:
STring(void);
~STring(void);
void ExtractString();/*分解字符串*/
void COleDateTime2CString();/*COleDateTime转CString*/
void CString2COleDateTime();/*CString转COleDateTime*/
CString STring::StringToHex(CString strOriginal);
CString STring::HexToString(CString strOriginal);
CString STring::CharToString(char* pcResult);
char* STring::StringToChar(CString strOriginal);
CString STring::COLORREFToString(COLORREF color);
};
STring::STring(void)
{
}
STring::~STring(void)
{
}
void STring::ExtractString(){
CString strOriginal = L"a,b,c";
CString strResult = L"";
for(int i = 0;i<3;i++){
AfxExtractSubString(strResult,strOriginal,i,',');
AfxMessageBox(strResult);
}
}
void STring::COleDateTime2CString(){
COleDateTime odtCurrentTime = COleDateTime::GetCurrentTime();
CString strCurrentTime = odtCurrentTime.Format(L"%Y-%m-%d %H:%M");
}
void STring::CString2COleDateTime(){
COleDateTime odtCurrentTime = COleDateTime::GetCurrentTime();
CString strCurrentTime = odtCurrentTime.Format(L"%Y-%m-%d %H:%M");
odtCurrentTime.ParseDateTime(strCurrentTime);
}
CString STring::StringToHex(CString strOriginal){
int length = strOriginal.GetLength();
CString strOutput, strTemp;
for (int i=0; i<length; i++)
{
strTemp.Format(L"%04X", strOriginal[i]);
strOutput+=strTemp;
}
return strOutput;
}
CString STring::HexToString(CString strOriginal)
{
int nInterval=4;
CString strTemp=L"";
CString strResult=L"";
for(int i=0;i<strOriginal.GetLength();i++)
{
int last=_tcstol(strOriginal.Mid(i,nInterval),NULL,16);//
strTemp.Format(L"%c",last);
i+=3;
strResult=strResult+strTemp;
}
return strResult;
}
CString STring::CharToString(char* pcResult)
{
DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, pcResult, -1, NULL, 0);
wchar_t *pwText = new wchar_t[dwNum];
if(!pwText)
{
delete []pwText;
return _T("");
}
MultiByteToWideChar (CP_ACP, 0, pcResult, -1, pwText, dwNum);
return pwText;
}
char* STring::StringToChar(CString strOriginal)
{
strOriginal.ReleaseBuffer();
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,strOriginal,-1,NULL,0,NULL,FALSE);
char *psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,strOriginal,-1,psText,dwNum,NULL,FALSE);
return psText;
}
CString STring::COLORREFToString(COLORREF color)
{
CString szTemp=_T("");
CString szColor=_T("");
int iG=0,iB=0,iR=0;
iR = GetRValue(color);
iG = GetGValue(color);
iB = GetBValue(color);
szTemp.Format(_T("%02x%02x%02x"),iR,iG,iB);
szColor =_T("#")+szTemp;
return szColor;
}