串口发给我的是十六进制数,我该如何正确接受并显示信息呢?比如串口发给我的是FF FF FF FF FC或00 00 00 00 00之类的东东,我该如何判断这些内容并显示出来呢?请各位高手帮忙哦,解决后一定结贴!谢谢!

解决方案 »

  1.   

    function C2DS(C : Char): String;
    var
    ti: Integer;
        rs: String;
    begin
        ti := Ord(C);
        ti := D2SameH(ti);
        rs := IntToStr(ti);
        while Length(rs) < 2 do
         rs := '0' + rs;
        result := rs;
    end;
    /////////////////////////////////////
    var
        S: String;
    for i:=0 to Length(YourRecieveStr)-1 do
    begin
        S := S+ C2DS(YourRecieveStr[i]);
    end;
    ShowMessage(s);
    ////////////////////////////////////
      

  2.   

    接收的时候你要定义一个数组,byte或char都可以的。
    关键是你要输出成什么形式,就转化为什么形式。
    不管你是怎么读的,数据还是这数据,只是处理方式不同而已。
      

  3.   

    我想你应该使用一个专用的串口控件的一个接收事件来实现。比如:spcomm 控件等.如里要更详细的资料可以用邮件咨询
      

  4.   

    请问一楼的,D2SameH()是什么函数呀,为什么一运行就会出错呢?
      

  5.   

    不好意思,自定义,帖漏了,,
    function D2SameH(dNum:integer):Integer;
    begin
        result:= (dNum div 10) * 16 + (dNum mod 10);
    end;
      

  6.   

    错了,我把你地意思理解错了,否决前面
    var
      i: Integer;
      s: String;
    begin
      for i := 1 to Length(YourRecieveStr)-1  do
      begin
          s := s + IntToHex(YourRecieveStr[i],2) + ' ';
      end;
    end;
      

  7.   

    编写一个接收函数吧.在接收事件触发时执行就行了.其中有格式转换的问题.如果要对其不同的子字符串作处理就在接收函数中用case语句.应该不会很难.试试阿
      

  8.   

    重新回答了一下,为理解错误而误导你道歉,
    对不起!
    不好意思!
    sorry!
      

  9.   

    又写错了,s := s + IntToHex(Order(YourRecieveStr[i]),2) + ' ';