小弟我是一个编程新手,我自己也编了一个串口通讯的调试界面。别的工作都已经完成了,但是接收、发送只能是十进制的。我想把它编程十六进制的。但是搞了好久都没搞好。我知道可以用intTOhex函数,但是就不知道怎么将代码加到我现有的代码中去。我只会将具体的整形变量变为十六进制显示。不会将接收到的数据转为十六进制。请各位指点。敬请将源代码贴上来。procedure TForm1.MSComm1Comm(Sender: TObject);
var
     recstr:Olevariant;
     j:integer;
 begin
  MSComm1.Settings:=ComboBox1.text;
  if Mscomm1.CommEvent=comEvReceive then
    begin
      recstr:=MSComm1.Input;
      memo1.Text:=memo1.Text+recstr+#13;
    end;
 end;这是我接收到的网络信号,放在memo1.text中。

解决方案 »

  1.   

    procedure TForm1.MSComm1Comm(Sender: TObject);
    var
    recstr:Olevariant;
    j:integer;
    s:string;
    begin
    MSComm1.Settings:=ComboBox1.text;
    if Mscomm1.CommEvent=comEvReceive then
    begin
    recstr:=MSComm1.Input;
    s:='';
    for j:=1 to length(recstr) do
      s:=s+inttohex(byte(recstr[j]),2);
    memo1.Text:=memo1.Text+s+#13;
    end;
    end;
      

  2.   

    recstr :='0x' + recstr;
    iRec:= StrToInt(recstr);
    这个iRec就是得到的10进制数了
      

  3.   

    dinglinger前辈,我将你的代码复制过去能运行,但是不能接收数据,只要一接收数据就会弹出“invalid argument”信息,指示这条语句有问题:s:=s+inttohex(byte(recstr[j]),2);
    这是为什么?
      

  4.   

    procedure TForm1.MSComm1Comm(Sender: TObject);
        var
        recstr:Olevariant;
        j:integer;
        s:string;
        begin
        MSComm1.Settings:=ComboBox1.text;
        if Mscomm1.CommEvent=comEvReceive then
          begin
           recstr:=VarArrayCreate([0,sizeof(MSComm1.Input)],varByte);
           recstr:=MSComm1.Input;
           s:='';
           for j:=0 to length(recstr)-1 do
             s:=s+inttohex(recstr[j],2);
           memo1.Text:=memo1.Text+s+#13;
          end;
        end;你这样试试吧,我机器没有MSCOMM,试不了。我一般用的是SPCOMM。呵呵。
      

  5.   

    我将recstr:=MSComm1.Input;去掉,将for j:=0 to length(recstr)-1 do改为:for j:=0 to length(recstr) do,能显示字符,但是永远是00。请指教,有QQ或MSN吗?我的MSN:[email protected]