procedure TForm1.TcpServer1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
ReceiveBuffer:array[0..2000] of byte;
strData,hexstr:string;
showstr:single;
len,i:integer;
begin
        strdata:='';
        len:=Socket.ReceiveLength;
        FillChar(ReceiveBuffer,sizeof(ReceiveBuffer),0);
        socket.ReceiveBuf(ReceiveBuffer,len);
        copymemory(@showstr,@ReceiveBuffer[52],4);
        listbox1.lines.add(floattostr(showstr));
        move(hexstr,ReceiveBuffer,len);
        listbox1.lines.add(hexstr);
        
end;
ReceiveBuffer接收数据
'192 0 73 37 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 1 0 48 0 48 0 49 0 48 0 50 0 54 0 48 0 48 0 52 0 0 0 0 0 0 0 0 0 128 63 121 114 163 143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 192'
最后执行两句:
move(hexstr,ReceiveBuffer,len);
listbox1.lines.add(hexstr);
结果是空值,怎么回事啊?

解决方案 »

  1.   

    ReceiveBuffer接收的是十六进制的字符串吧
      

  2.   

    move(hexstr,ReceiveBuffer,len); 
    // 下面是函数原型,写反了.
    procedure Move(const Source; var Dest; count : Integer);
      

  3.   


    var
      ReceiveBuffer:array[0..20] of Byte;
      str:string;
    begin
      SetLength(str,Length(ReceiveBuffer));
      move(ReceiveBuffer[0],str[1],Length(ReceiveBuffer));
    end;
      

  4.   

    move的参数,每次都要等它的hint才能确定。
      

  5.   


    MOVE前先对字符串分配内存 
      

  6.   


    setlength(strdata,len);
    move(ReceiveBuffer,strdata,len);
    listbox1.Lines.Add(strdata);
    还是要报错误啊,老大们ReceiveBuffer我定义的是2000,
    len是实际接受的长度,但是len肯定是小于2000的
    setlength(strdata,len);或者setlength(strdata,2000);
    都不行啊,着急啊
      

  7.   

    move(ReceiveBuffer[0],strdata[1],len);