之前的帖子:
http://community.csdn.net/Expert/topic/4857/4857418.xml?temp=.3349878接上:
可以在UDPServerUDPRead事件中返回发送数据后的结果,
procedure TFrm_UDPServer.UDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  s: String;
begin
  DataStringStream := TStringStream.Create('');
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    s := DataStringStream.DataString;
end;
但是,s里得到的是这样“@@@@?”的数据,
估计是16进制的缘故,
本来应该返回的是应该这样的:
40 40 40 40 01 fb 05 00 00 00 00 21 00 01 00 00 01
请问,如何可以把返回的结果转换成我需要的格式,

解决方案 »

  1.   

    这样呢:var
      S: String;
      i, iAllRead, iRead: Integer;
      Buf: array [0..1023] of Byte;
    begin
      iAllRead := 0;
      S := '';
      while iAllRead < AData.Size do
      begin
        iRead := AData.Read(Buf, SizeOf(Buf));
        if iRead <= 0 then Break;
        Inc(iAllRead, iRead);
        for I := 0 to iRead -1 do
        begin
          S := S + Format('%.2X ', [Buf[I]]);
        end;
      end;
    end;
      

  2.   

    多谢,
    另外,还想请教下:
    现在的情况是这样的,
    要连一个设备,这个设备支持LAN/RS485/RS232,三种连接方式(是不是要写三类同功能的函数来操作设备?),
    在程序里如何设置才可以自动判断连接方式、并根据不同的连接方式判断函数,
    可以指点下吗,
    多谢了,
      

  3.   

    LAN/RS485/RS232
    我所接触到的RS485都是转换成RS232的了根据优先级来判断,比如Lan的优先级比较高的话,先判断Lan是否能连接,如果不能连接再判断其他的连接是否可以连接,都不能连接的话,则提示用户连接方式不同当然要写不同的函数,但如果你设计得合理的话,不用所有的函数都分别区分3个的,仅把数据传输部分区分开就好了
      

  4.   

    RS485/RS232
    可以通过转化头(Converter)来实现,共用函数,
    但是LAN方式则必须用另外的函数,
    是吗?