16进制字符串转byte数组

来源:互联网 发布:4g初级网络优化工程师 编辑:程序博客网 时间:2024/05/18 02:43

具体的方法如下:

int CSerialPortCEDlg::String2Hex(CString str, CByteArray & senddata)
{

  int hexdata,lowhexdata;
  int hexdatalen=0;
  int len=str.GetLength();
 
  senddata.SetSize(len/2);
 
  for(int i=0;i<len;)
  {
    char lstr,hstr=str[i];
    if(hstr==' ')
    {
       i++;
      continue;
    }
    i++;
    if(i>=len)
      break;
    lstr=str[i];
    hexdata=ConvertHexChar(hstr);
    lowhexdata=ConvertHexChar(lstr);
    if((hexdata==16)||(lowhexdata==16))
       break;
    else
      hexdata=hexdata*16+lowhexdata;
    i++;
    senddata[hexdatalen]=(char)hexdata;
    hexdatalen++;
 }

  senddata.SetSize(hexdatalen);
  return hexdatalen;
}

char CSerialPortCEDlg::ConvertHexChar(char ch)  
{  
 if((ch>='0')&&(ch<='9'))
  return ch-0x30;
 else if((ch>='A')&&(ch<='F'))
  return ch-'A'+10;
 else if((ch>='a')&&(ch<='f'))
  return ch-'a'+10;
 else return (-1);
}

这样就可以解决这个问题了。

原创粉丝点击