小弟现在在写一个socket的程序,对端是用c写的。C把c的一个结构体memcpy到一个buf中,然后发送。接收端用delphi,我收到stream后,如何还原其结构体内容,读出。

解决方案 »

  1.   

    你必須知道該結構體的格式, 然後, 用強制轉換, 將stream中指向的內容轉為該對應格式!!
      

  2.   

    同意aiirii(ari)。
    另外注意:从stream读内容到结构变量的时候加"^"
    例如:
    p : PRecord;p := AllocMem(sizeof(Record));stream.read(p^,sizeof(Record));
      

  3.   

    例如c 的结构是如下定义:
    typedef
    {
      int i;
      word j;
    }myrecord;你必须先在delphi定义这个结构:
    type
      myrecord = record
      i : integer;
      j : word;
    end;
    pmyrecord = ^myrecord;读出:
    var
      p : Pmyrecord;
    begin
      p := AllocMem(sizeof(myrecord));
      stream.read(p^,sizeof(myrecord));
      
    然后就可以访问了:
      xxx := p.i;
      yyy := p.j;
    ... 
      

  4.   

    楼上都说了,其实我觉得你直接用  CLIENTSOCKET1.Socket.ReceiveBuf(YOURRECORD,SIZEOF(YOURRECORD))