BOOL TransData(CString InStr,PUCHAR OutStr)
{
UINT i=0, j=0;
UINT len=0;
len = InStr.GetLength();
if ((len % 2) != 0)
{
m_strError.Format("长度错误[%s][%d]",InStr,len);
return FALSE;
}
UCHAR *Str = new UCHAR[len+1];
memset(Str,0, len+1);
strcpy((char*)(Str),InStr.GetBuffer(0));
InStr.ReleaseBuffer();
for(i=0; i<len; i++)
{
if ((Str[i] > 47) && (Str[i] < 58))
{
Str[i] -= 48;
}
else if ((Str[i] > 64) && (Str[i] < 71))
{
Str[i] -= 55;
}
else if ((Str[i] > 96) && (Str[i] < 103))
{
Str[i] -= 87;
}
else
{
m_strError.Format("不是十六进制字符数据[%s][位置:%d]",InStr,i);
delete [] Str;
return FALSE;
}
}
i = 0;
while(i < len)
{//转换
Str[j] = Str[i]*16 + Str[i+1];
i += 2;
j++;
}
memcpy(OutStr,Str,len/2);
delete [] Str;
return TRUE;
}
//使用
CString str = “EF2A3B4D5E6F”;
int nLen = str.GetLength();
int nbufflen = nLen/2;
byte *pbuff = new byte[nbufflen + 1];
ZeroMemory(pbuff,nbufflen + 1);
TransData(str,pbuff);
//转换byte【】到CString
/*
byte data[] = {0xF2,0x1A,0xEF,0xcd,0xab,0x01,0x12,0x23,0x45,0x67,0x89,0x01};转换后
"F2 1A EF CD AB 01 12 23 45 67 89 01" 字符串
*/
byte Thrans(byte c)
{
byte o;
if (c >= 0x0 && c <= 0x9)
{
o = c + '0';
}
else if (c >= 0x0a && c <= 0x0f)
{
o = c + '0x0A' - 0x0A;
}
else
{//出错
int y = 0;
y++;
}
return o;
}
CString Thrans(byte *pData,int nlen)
{
CString strOut;
for (int i=0; i< nlen; i++)
{
byte tbyte = pData[i];
byte diwei = (tbyte >> 4) & 0x0f;
byte gaowei = (tbyte) & 0x0f;
byte r = Thrans(diwei);
strOut += r;
r = Thrans(gaowei);
strOut += r;
strOut += " ";
}
return strOut;
}