有关MSComm控件的有关问题

有关MSComm控件的问题//在接受框内一十六进制输入int CMyDlg::String2Hex(CString str, CByteArray &sendd

有关MSComm控件的问题
//在接受框内一十六进制输入
int CMyDlg::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();//int GetLength( ) const;Call this member function to get a count of the bytes in this CString object. The count does not include a null terminator.
senddata.SetSize(len/2);//void SetSize( int nNewSize, int nGrowBy = -1 );

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

能不能解释一下上面这个程序每句话的含义
//将0—f字符转化为16进制数
char CMyDlg::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);
}


[解决办法]
先弄清楚ascii及16进制数