请问,如何从串口接收数据并以十六进制显示出来

解决方案 »

  1.   

    用SPCOMM组件IntToHex具体自己找Google的_____________________
    http://lysoft.7u7.net
      

  2.   

    SPCOMM接收串口发送的十六进制数据的源代码Procedure TfrmPower.Comm1ReceiveData(Sender:TObject; Buffer:Pointer;
      BufferLength:Word);
    Var
      i:Integer;
      Viewstring:String;
      rbuf:Array[1..300] Of Byte;
      bufflen:integer;
    Begin
      bufflen := 160;
      If (bufferlength >= bufflen) Then
        exit;
      viewstring := '';
      move(buffer^, rbuf, bufferlength);
      For i := 1 To bufferlength Do
        viewstring := viewstring + inttohex(rbuf[i], 2) + '';
      //viewstring 就是十六进制的数据
    End;
      

  3.   

    用tcommprocedure TForm1.btnSendClick(Sender: TObject);
    var
    //传送及接收要用的动态数组声明
      ByteSend:array of Byte;
    //  ByteReceive:array of Byte;
     // Count,i:DWORD;
      i:DWORD;
     // PT:PByte;  //字节指针
      str:string;
    begin
      if not Comm1.PortOpen then
      begin
      MessageBox(0,'请先打开串口','串口错误',MB_OK);
      exit;
      end;
      //指定欲传送的字节
      SetLength(ByteSend,mSend.Lines.Count);
      for i:=0 to mSend.Lines.Count-1 do
      ByteSend[i]:=StrToInt(trim(mSend.Lines[i]));
      Comm1.OutputByte(ByteSend);//串口传送出去
     
      TimeDelay(100); //延迟500毫秒    //接收字节数据,包括数目及地址
      Count:=Comm1.ReadInputByte(PT);
      //接收的数据指定给接收数组
      SetLength(ByteReceive,Count);
      for i:=0 to Count do
      begin
        ByteReceive[i]:=PT^;
        //结果显示在Memo组件中(Append方式)
          str:=str+inttohex(bytereceive[i],3) + chr(13)+ chr(10);
          mReceive.Text:=trim(str);//+chr(13)+chr(10);//inttohex(strtoint(str),3)+chr(13)+chr(10);
        Inc(PT);
        end;