我想将从串口接收到的字符串转化成十六进制显示。现在我可以将固定的整形数100转化成64,但是不会将接收到的字符串转化为整形数据。请贴代码。谢谢!

解决方案 »

  1.   

    strtoint()
    strtoint64()
    val()
      

  2.   

    var
      s:string;
      i:Integer;
    begin
      s:='64';
      i:=StrToInt('$'+s);
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);var
      I: Integer;
      J: Integer;
    begin
      I := StrToInt(Edit1.Text);
      J := StrToInt(Edit2.Text);
      ShowMessage(IntToStr(I + J));
    end;
    --------------------
    ses Dialogs;
    var   I, Code: Integer;
    begin
      { Get text from TEdit control }
      Val(Edit1.Text, I, Code);
      { Error during conversion to integer? }
      if Code <> 0 then
        MessageDlg('Error at position: ' + IntToStr(Code), mtWarning, [mbOk], 0);
      else
        Canvas.TextOut(10, 10, 'Value = ' + IntToStr(I));end;
    ------------请给分,谢谢
      

  4.   

    现在我下面的程序已经能将接收到的一个数据变成十六进制显示拉,但是如果发送的是一串数据就只能转换最后的一个数据:发送:97 98 99 100 显示:00 64。这是哪里出了问题啊?
    procedure TForm1.MSComm1Comm(Sender: TObject);
        var
        recstr:Olevariant;
        s:string;
        y:integer;
         begin
        MSComm1.Settings:=ComboBox1.text;
        if Mscomm1.CommEvent=comEvReceive then
          begin
           recstr:=MSComm1.Input;
           s:=s+IntToHex(StrToIntDef(recstr,0),2);
           memo1.Text:=memo1.Text+s+#13;
          end;
        y:=length(memo1.Text);
        if y>200 then memo1.text:='';
        end;
      

  5.   

    问题不应该是出在转换那里
    应该是你循环不对 或者对 recstr赋值不对
    -----------
    var
      s: string;
      aa: Array[0..3] of Integer;
      i : Integer;
    begin
      aa[0]:= 10;
      aa[1]:= 99;
      aa[2]:= 64;
      s:= '';
      for i:= 0 to 2 do
        s:= s+InttoHex(aa[i],2);
      Showmessage(s);
      

  6.   

    是的,应该是我的接收有问题。用 topforver的程序是可以算出固定数的十六进制。但是我如果是在MSComm接收到的数据呢,应该怎么该代码啊?新手,可以理解,嘿嘿。
      

  7.   

    我这里没有MSComm,所以不调试了,只是指出你的问题所在,给你点参考.
    procedure TForm1.MSComm1Comm(Sender: TObject);
    var
      recstr:Olevariant;
      s:string;
      y:integer;
      i:integer;
      ti:integer;                              //加一个循环次数的变量
    begin
      MSComm1.Settings:=ComboBox1.text;
      if Mscomm1.CommEvent=comEvReceive then  //你下面没有循环啊
      begin
    //-----------------------------------     //你得程序少了这一段
        ti:=Mscomm1.InBufferCount;
        for i:=0 to ti-1 do begin             //根据上面进行循环
        
        end;  
    //----------------------------------- 
      end;
        y:=length(memo1.Text);
        if y>200 then memo1.text:='';
    end;**************************
    以下是网上找点片断
    var
      i, InputLen: Integer;
      tmpInt: Integer;
      tmpvar: Variant;
      tmparray: array[0..33] of byte;
    begin
      if MSComm.CommEvent = ComEvReceive then
      begin
        InputLen := MSComm.InBufferCount;
        InputString:='';
        for i := 0 to InputLen -1 do    begin
          tmpint := Tmpvar[i];
          tmparray[i] := Tmpvar[i];
          InputString := InputString + ' ' + IntToHex(tmpInt, 2);
        end;
        MainForm.mmReceive.Text := MainForm.mmReceive.Text + Inputstring;
      

  8.   

    谢谢 topforver,问题解决后,一定给你加分