两段代码,大家能帮忙提高一下下率吗?
void H2B(char* szTxt,unsigned char * bBuf,unsigned int unLen)
{
char * pTxt = szTxt;
size_t nLen = 0;
if( !szTxt || !bBuf || unLen < (nLen = strlen(szTxt)/2) || strlen(szTxt) % 2 )
{
return;
}
for(size_t i = 0 ; i < nLen ; i++)
{
unsigned char * punBuf = bBuf;
char* cIn = pTxt;
if(cIn[0] >= 0x30 && cIn[0]<0x40)
{
*punBuf = (cIn[0] - 0x30)*16;
}
else
{
*punBuf = (cIn[0] - 0x37)*16;
}
if(cIn[1] >= 0x30 && cIn[1]<0x40)
{
*punBuf += (cIn[1] - 0x30);
}
else
{
*punBuf += (cIn[1] - 0x37);
}
pTxt += 2;
bBuf++;
}
}
void B2H(unsigned char * punBuf,unsigned int unBufLen,char* szOut,unsigned int unTxtLen)
{
static char szTab[] = "0123456789ABCDEF";
if(unBufLen*2 >= unTxtLen || !punBuf || !szOut )
{
return;
}
while(unBufLen--)
{
unsigned char unBuf = *punBuf;
char* cOut = szOut;
int nPos = 1;
while(nPos>=0)
{
cOut[nPos--] = szTab[unBuf % 16];
unBuf = unBuf / 16;
}
szOut += 2;
punBuf++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char szTxt[] = "18A17B16C";
unsigned char szBuf[5];
memset(szBuf,0,sizeof(szBuf));
char szDes[11];
memset(szDes,0,sizeof(szDes));
H2B(szTxt,szBuf,sizeof(szBuf));
B2H(szBuf,sizeof(szBuf),szDes,sizeof(szDes));
printf("%s\n",szDes);
HANDLE hHandle = ::GetCurrentProcess();
BYTE buf[8193];
char szHexTxt[24576];
memset(szHexTxt,0,sizeof(szHexTxt));
memset(buf,0,sizeof(buf));
::ReadProcessMemory(hHandle,&_tmain,buf,sizeof(buf),NULL);
B2H(buf,sizeof(buf),szHexTxt,sizeof(szHexTxt));
printf("%s\n",szHexTxt);
getchar();
return 0;
}
////////