//create by liwei at 20090220
#ifndef ASCTOFROMBNY_H
#define ASCTOFROMBNY_H
#pragma once
#ifdef UNICODE
#define CONVER_STR_CHAR 2
#else
#define CONVER_STR_CHAR 1
#endif
#define DECIMAL_CONVER 0
#define HEXADECIMAL_CONVER 1
class AscBinConver
{
public:
AscBinConver(void){};
public:
virtual ~AscBinConver(void){};
public:
char* CAscToBin(char *pBuf, int nLen, int nType = 0/*0, decimal; 1,hexadecimal*/)
{
ASSERT(pBuf);
CString strBin = _T("");
char *cRet = new char[nLen + 1];
ASSERT(cRet);
memset(cRet,0,nLen + 1);
for(int i = 0; i < nLen / CONVER_STR_CHAR; i ++)
{
int aa = *(pBuf + i * CONVER_STR_CHAR);
char cc[4] = {0};
if(nType == DECIMAL_CONVER)
itoa(aa,cc,10);
else
itoa(aa,cc,16);
int len = 2 - strlen(cc);
for (int j = 0; j < len; ++j)
cc[j] = '0';
memcpy(cRet + i * CONVER_STR_CHAR,cc,2);
}
return cRet;
};
CString SAscToBin(CString pBuf, int nType = 0/*0, decimal; 1,hexadecimal*/)
{
CString strBin = _T("");
for(int i = 0; i < pBuf.GetLength(); i ++)
{
int aa = pBuf.GetAt(i);
char *cc = NULL;
cc = new char[4];
ASSERT(cc);
memset(cc,0,4);
if(nType == DECIMAL_CONVER)
itoa(aa,cc,10);
else
itoa(aa,cc,16);
int len = 2 - strlen(cc);
for (int j = 0; j < len; ++j)
strBin += '0';
strBin += cc;
if(cc)
{
delete[] cc;
cc = NULL;
}
}
return strBin;
};
char* CBinToAsc(char* pBuf, int nLen, int nType = 0/*0, decimal; 1,hexadecimal*/)
{
ASSERT(pBuf);
TRACE("BinToAsc:%s%s%s\r\n",pBuf, pBuf + 2, pBuf + 4);
CString strAsc = _T("");
char *cRet = new char[nLen + 1];
ASSERT(cRet);
memset(cRet,0,nLen + 1);
for (int i = 0; i < nLen / (2 * CONVER_STR_CHAR); i ++)
{
char cc[4] = {0};
cc[0] = *(pBuf + i * 2 * CONVER_STR_CHAR);
cc[1] = *(pBuf + i * 2 * CONVER_STR_CHAR + CONVER_STR_CHAR);
char cNum = '0';
if(nType == DECIMAL_CONVER)
cNum = atoi(cc);
else
{
int nGet16 = Con16TO10(cc);
TRACE("%s Con16TO10:%d\r\n",cc,nGet16);
cNum = Con16TO10(cc);
}
cRet[i] = cNum;
}
return cRet;
};
CString SBinToAsc(CString pBuf, int nType = 0/*0, decimal; 1,hexadecimal*/)
{
CString strAsc = _T("");
for (int i = 0; i < pBuf.GetLength() / 2; i ++)
{
char cc[4] = {0};
cc[0] = pBuf.GetAt(i * 2);
cc[1] = pBuf.GetAt(i * 2 + 1);
char cNum = '0';
if(nType == DECIMAL_CONVER)
cNum = atoi(cc);
else
cNum = Con16TO10(cc);
strAsc.Insert(strAsc.GetLength(),cNum);;
}
return strAsc;
};
int Con16TO10(char *pBuf)
{
ASSERT(pBuf);
//if(strlen(pBuf) < 2)
// return 0;
return CharToInt(*(pBuf + 0)) * 16 + CharToInt(*(pBuf + 1));
}
int CharToInt(char cIn)
{
int nRet = cIn;
if(nRet > 47 && nRet < 58)
nRet -= 48;
else if (nRet > 64 && nRet < 71)
nRet -= 55;
else if (nRet > 96 && nRet < 103)
nRet -= 87;
else
nRet = 0;
return nRet;
}
};
#endif //ASCTOFROMBNY_H
- 1
- 2
前往页