⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytools.cpp

📁 收发短信ocx控件
💻 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 + -