这些字节流一般都是某种结构/记录。通常我都是直接进行结构类型转换来操作:
with TSomeRec(Buff^) do
begin
xx:=xxx;
yy:=yyy;
end;这样不仅容易理解,而且操作简单,还可以方便扩展。
但是现在收到的却是一个较为特殊的“记录流”,该 record 定义如下:TRecA = record
...
end;TRecB = record
xx:Integer;
yyCount:Integer; yy1:TRecA;
yy2:TRecA;
...
yyn:TRecA; zz:Integer;
end;其中 yyn 的数量不固定。这时就没法再用TRecB()进行操作了。若再定义一个TRecA_Array的动态记录数组,那么TRecB里面保存的只是一个指向TRecA_Array的指针而已,而不是yyCount * SizeOf(TRecA)长的内存。那么请教一下这时该怎么对这些yyn进行操作?难道非得直接定位吗?
with TSomeRec(Buff^) do
begin
xx:=xxx;
yy:=yyy;
end;这样不仅容易理解,而且操作简单,还可以方便扩展。
但是现在收到的却是一个较为特殊的“记录流”,该 record 定义如下:TRecA = record
...
end;TRecB = record
xx:Integer;
yyCount:Integer; yy1:TRecA;
yy2:TRecA;
...
yyn:TRecA; zz:Integer;
end;其中 yyn 的数量不固定。这时就没法再用TRecB()进行操作了。若再定义一个TRecA_Array的动态记录数组,那么TRecB里面保存的只是一个指向TRecA_Array的指针而已,而不是yyCount * SizeOf(TRecA)长的内存。那么请教一下这时该怎么对这些yyn进行操作?难道非得直接定位吗?
xx:Integer;
zz:integer;
yyCount:Integer;
yyArray:array[0..65535] of TRecA;
end;
with TrecB(Buff^).yyArray[...] do
begin
...
end;
至于Buff的内存前面申请