procedure TForm1.SendHex(S: String);
var
  s2:string;
  buf1:array[0..50000] of char;
  i:integer;
begin
  s2:='';
  for i:=1 to  length(s) do
  begin
    if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
        or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
    begin
        s2:=s2+copy(s,i,1);
    end;
  end;
  for i:=0 to (length(s2) div 2-1) do             //这句看不懂。
    buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));//这句看不懂。
  Comm1.WriteCommData(buf1,(length(s2) div 2));
end;
是SPCOMM中发送十六进制的,有两句看不懂。

解决方案 »

  1.   

      for i:=0 to (length(s2) div 2-1) do            //按字符串长度的一半进行循环
        buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));//每个字符组成一个16进制的字符串,转为值
      

  2.   

      for i:=0 to (length(s2) div 2-1) do            //按字符串长度的一半进行循环 
        buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));//每2个字符组成一个16进制的字符串,转为值
      

  3.   

    谢谢楼上的恩人,
    buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));//每2个字符组成一个16进制的字符串,转为值
    还不太明白,能不能做个例子
      

  4.   

    '12ab'
    =>
    buf1[0]:=char($12)
    buf1[1]:=char($ab)
      

  5.   

      for i:=0 to (length(s2) div 2-1) do            //这句看不懂。 
        buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));//这句看不懂。 这里大概意思是将1个字符串中每次取2个字符然后组合为1个新的字符,这些新的字符最后都存放到1个字符数组里面