📄 mytools.cpp
字号:
// MyTools.cpp: implementation of the CMyTools class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MyTools.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CString CMyTools::EnCodeEnglish(CString srcStr)
{
CString result;
BYTE cur,c1,c2;
CString tmp;
int len,i=0,j=0;
len = srcStr.GetLength() - 1;
result = "";
while(i <= len)
{
c1 = srcStr.GetAt(i);
if(i < len)
{
c2 = srcStr.GetAt(i+1);
cur = (c1 >> j) | (c2 << (7-j) & 0xff);
}
else
cur = (c1 >> j) & 0x7f;
tmp.Format("%2.2X",cur);
result = result + tmp;
i++;
j = (j+1) % 7;
if(j == 0)
i++;
}
return result;
}
CString CMyTools::DeCodeEnglish(CString srcStr)
{
CString strDest,strData;
int n = 0,i,flag = 0,j = 0;
strData = "";
int len = srcStr.GetLength();
for(i=0;i<len-1;i+=2)
{
CString strTmp;
char tmp;
strTmp.Format("0x%1c%1c",srcStr.GetAt(i),srcStr.GetAt(i+1));
tmp = HexToChar((LPSTR)(LPCTSTR)strTmp);
strData = strData + tmp;
}
len = len/2 + len/2/8;
for(i = 0;i<len;i++)
{
strDest = strDest + " ";
}
for(i=0;i<len;i++)
{
BYTE c1,c2;
if(i == 0)
{
c1 = strData.GetAt(i);
strDest.SetAt(i,c1 & 0x7f);
}
else
{
c1 = strData.GetAt(j);
c2 = strData.GetAt(j+1);
strDest.SetAt(i,(c2 << n) | (c1 >> (8 - n)));
strDest.SetAt(i,strDest.GetAt(i) & 0x7f);
if(i%8 != 0)
j++;
}
n = (i % 8) + 1;
}
return strDest;
}
BYTE CMyTools::HexToChar(CString hex)
{
int base = 1;
int ret = 0;
for(int i=hex.GetLength()-1;i>=0;i--)
{
char chex = hex.GetAt(i);
int ihex;
if(chex >= 'A' && chex <='F')
{
ihex = 15 - ('F' - chex);
}
else
if(chex >= 'a' && chex <='f')
{
ihex = 15 - ('f' - chex);
}
else
ihex = chex - '0';
ret += ihex * base;
base*=16;
}
return ret;
}
CString CMyTools::SwapConvert(CString str)
{
CString result;
result = str;
for(int i=0;i<strlen(str);i+=2)
{
result.SetAt(i,str.GetAt(i+1));
result.SetAt(i+1,str.GetAt(i));
}
return result;
}
CString CMyTools::EnCodeChinese(CString strSrc)
{
CString strResult = "",strTmp,str;
char lpBuff;
int len = strSrc.GetLength();
int i;
WCHAR * wc;
wc = new WCHAR[len];
for(i=0;i<strSrc.GetLength();i++)
{
if((strSrc.GetAt(i) & 0x80) >> 7 == 0)
len++;
}
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,(LPSTR)(LPCTSTR)strSrc,len,wc,len/2);
for(i=0;i<len/2;i++)
{
strTmp.Format("%4.4X",wc[i]);
strResult += strTmp;
}
return strResult;
}
CString CMyTools::DeCodeChinese(CString strSrc)
{
char *pBuf;
CString strMsg = strSrc;
int nLength = strMsg.GetLength();
if (nLength%2 == 1)
{
strMsg = strMsg.Left(nLength-1);
int nNewLen = strMsg.GetLength();
pBuf = new char[nNewLen/2];
}
else
{
pBuf = new char[nLength/2];
}
HexToChar(strMsg,pBuf);
int i = 0,nZero = 0;
while ((i = strMsg.Find("00",i))>=0)
{
i += 2;
nZero++;
}
char u_ret[255];
memset(u_ret,0,255);
int nResult=WideCharToMultiByte(
CP_ACP, // code page
WC_COMPOSITECHECK, // character-type options
(LPCWSTR)pBuf, // string to map
nLength/4, //str.GetLength(), // number of bytes in string
(LPSTR)u_ret, // wide-character buffer
sizeof(u_ret), // size of buffer
NULL,
NULL
);
CString sMessage;
sMessage.Format("%s",u_ret);
return sMessage;
}
void CMyTools::HexToChar(CString sHex, char *p)
{
unsigned char byteToHex[] =
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'};
int nLen = sHex.GetLength();
char *chBuf = p,//记录内存块的首地址
*pch;
CString sTemp,sLeft,sRight;
for (int i=0; i<nLen/4; i++)
{
sTemp = sHex.Left(4);
sHex.Delete(0,4);
sLeft = sTemp.Left(2);
sRight = sTemp.Right(2);
*chBuf = (char)strtoul(sRight.GetBuffer(2),&pch,16);
chBuf++;
sRight.ReleaseBuffer();
*chBuf = (char)strtoul(sLeft.GetBuffer(2),&pch,16);
chBuf++;
sLeft.ReleaseBuffer();
}
*chBuf='\0';
}
CString CMyTools::StrToHex(CString str)
{
CString ret = "";
for(int i=0;i<str.GetLength();i++)
{
char c = str.GetAt(i);
CString tmp;
tmp.Format("%2x",c);
ret += tmp;
}
ret.MakeUpper();
return ret;
}
CString CMyTools::ConvertToUTF8(CString str)
{
int sourceCodepage = 936;
int targetCodepage = CP_UTF8;
int len=str.GetLength();
int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);
wchar_t * pUnicode;
pUnicode=new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);
BYTE * pTargetData;
int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);
pTargetData=new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);
CString rt;
rt.Format("%s",pTargetData);
delete pUnicode;
delete pTargetData;
CString ret = "";
for(int i=0;i<rt.GetLength();i++)
{
CString tmp;
tmp.Format("%2x",(BYTE)rt.GetAt(i));
ret += tmp;
}
ret.MakeUpper();
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -