我要实现的是把两个不同的record合并发送给服务器端socket,然后服务器端解析成两个record(200)

  • 主题发起人 主题发起人 lishubing_2000
  • 开始时间 开始时间
L

lishubing_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是测试代码procedure TForm1.Button1Click(Sender: TObject);var t1,t2:TTest; buffer:array of byte; buffer1:array of byte; buffer2:array of byte; i:integer;begin t1.name := '1111111111111114'; t1.data := '2222222222222225'; i:=sizeof(t1); SetLength(buffer1,i); move(t1,buffer1,i); move(buffer1,t2,i); ShowMessage(t2.name); end;可这段代码执行完以后会报错,为什么
 
i:=sizeOf(t1);这句有问题!无论t1的内容如何,i的值是固定的。假如TTest=record name,data:string;end;那么i就是8。为什么呢?这是因为string类型特殊,大小不固定,当定义s为string类型时,其实s只不过保存一个地址,这个地址是一个字符串的首地址,而地址,在32位平台上是32bit的整数,占4个8bit的字节。关于结构中使用到string的,sizeOf都要特殊处理,建议自己些个sizeOf1函数吧。
 
move(t1,buffer1,i); move(buffer1,t2,i);改成 move(t1,buffer1[0],i); move(buffer1[0],t2,i);
 
后退
顶部