现在的位置: 首页 > 综合 > 正文

十六进制的字符串转换到十六进制byte数据

2013年11月26日 ⁄ 综合 ⁄ 共 1638字 ⁄ 字号 评论关闭

 

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;
}

抱歉!评论已关闭.