//下面这个函数在每两个字符之间插入空格
int CSCommTestDlg::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;
}
//把一个字符串转成相应16进制
char CSCommTestDlg::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);
}

解决方案 »

  1.   

    我也是才开始用delphi,可能效率不高,但功能是实现了
    用delphi改写如下:
    function ConvertHexChar(ch: AnsiChar): Integer;
    begin
      if (ch >= '0') and (ch <= '9') then
      begin
        result := Ord(ch) - 48;
        Exit;
      end
      else if (ch>='A') and (ch<='F') then
      begin
        result :=  Ord(ch) -Ord('A') + 10;
        Exit;
      end
      else if (ch>='a') and (ch<='f') then
      begin
        result := Ord(ch) -Ord('a') + 10;
        Exit
      end
      else begin
        Result := -1;
        Exit;
      end;
    end;function String2Hex(str: AnsiString; var senddata: TByteArray): integer;
    var
      hexdata, lowhexdata: Integer;
      hexdatalen: Integer;
      len: Integer;
      i: Integer;
      lstr, hstr: AnsiChar;
    begin
      hexdatalen := 0;
      len := Length(str);
      //senddata.SetSize(len/2);
      i := 1;
      while  i<= len do
      begin
        hstr := str[i];
        if hstr =' ' then
        begin
          Inc(i);
          Continue;
        end;
        Inc(i);
        if i > len then
        begin
          break;
        end;
        lstr := str[i];
        hexdata := ConvertHexChar(hstr);
        lowhexdata := ConvertHexChar(lstr);    if  (hexdata = 16) or (lowhexdata =16) then
        begin
          Break;
        end
        else begin
          hexdata := hexdata*16 + lowhexdata;
        end;    Inc(i);
        senddata[hexdatalen] := hexdata;
        Inc(hexdatalen);
      end;  //senddata.SetSize(hexdatalen);
      result := hexdatalen;end;