大侠们,我用MSCOMM做了一个串口通信程序,用文本模式相互发送信息就没问题,但如果下位机以16进制方式发送信息,接收就有问题了,请问怎么做16进制方式通信呀,急急急哟!解决问题,马上给分!

解决方案 »

  1.   


      vData :Variant;
      i     :integer;  MSComm1.InputMode := 1;  ............
      vData := MSComm1.Input;  Label1.Caption := '';
      for i := 0 to Length(vData) - 1 do
        Label1.Caption :=  Label1.Caption  + IntToHex(vData[i],2);
      

  2.   

    MSComm好像有一个是接收二进制的函数吧,你用这个函数可能就可以。
      

  3.   

    ywy360118大侠,你说的方法读可以,但如果发呢,比如我要给下位机发指令;比如我要发一个字符串,中间包含16进制字符,可我怎么发都要出错!
       如果再具体点就是,网上有很多串口调试工具,一般都有两种通信方式,一是文本模式,二是16进制模式,只要和串口调试工具互发信息没问题,那就OK了,但16进制方式是怎么转换的呢?
      

  4.   

    用MSCOMM收发十六进制,要用动态数值型数组就可以了
    收:var
    temp: array of byte;
    len: integer;
    i:Integer;
    output:string;
    begin
    len := mscomm1.buffersizw;
    setlength(temp,len);
    temp := mscomm1.input;
    output:='';
    for i:=1 to len do
    output:=output+IntToHex(temp[i-1],2);//output就是结果啦!如果是发送的话
    先将你要发送的十六进制数赋值到ARRAY OF BYTE这个动态数组
    然后发送 mscomm1.output := temp 
    这样就可以了给分!!!!
    我要200分!!!
      

  5.   

    忘了说,要把INPUTMODE改为二进制模式
    mscomm1.inputmode := 1;
      

  6.   

    别把它想得太神密,你直接定义byte型的数组,然后无论接收还是发送都以byte的方式进行就可以了!
        如果有必可,可以发完整例子给你!