有一结构如: Rep=record
  name:string;
  age:integer;
end;还有一char数组buf:array[0..8163] of char
如何将buf中的数据读到Rep的一定偏移之后,
比如recv的时候,接受到的数据比SizeOf(Rep)小??
我对delphi的指针不是很熟,发现无类型指针不能加减??

解决方案 »

  1.   

    也就是说,我得结构里已经先读了一下内容进去,比如5字节,还剩一些内容没有读进去,先利用将剩下的内容CopyMemory进去
      

  2.   

    将指针转型成Pchar就可加减。Inc及Dec过程也可用于非Pchar型指针。
    另外,string型的成员在record中只占四个字节,即只含有地址信息,你的reord实际只有8个字节,你的这个程序可能会有问题。如果要往record中写实际内容,应该定义为:
    Rep = packed record // 加上packed不会进行对齐,因你要进行内存复制工作
      name: array [0..MAX_NAME] of char; // 加上了一个空结束字符
      age: integer;
    end;具体用法:
    // 假定buf为char数组, array [0..MAX_BUF] of char
    Move( buf2[0], (Pchar(@req1)+5)^, sizeof(Rep)-5 ); // Move的参数不是指针,是引用