请问怎么定义可变的结构体 ( 积分: 50 )

  • 主题发起人 主题发起人 anick
  • 开始时间 开始时间
A

anick

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一段数据是这样定义的
type a = record
la : byte; //第一个数组实际的长度
ta : array[0..254] of byte; //数组
lb : byte; //第二个数组实际长度
tb :array[0..254] of byte; //数组
end;

先声明一下,不要告诉我用string,结构就是这样,ta和tb不是以0结束的,所以不能改变,我现在是想ta和tb对位的问题,我记得以前好像定义过的,最后的效果想如下面这样

type a = record
la : byte; //第一个数组实际的长度
ta : array[0..la-1] of byte; //数组
lb : byte; //第二个字符数组实际长度
tb :array[0..lb-1] of byte; //符数组
end;
 
那还不如用VARIANT呢
 
type a = record
la : byte; //第一个数组实际的长度
ta : array of byte; //数组
lb : byte; //第二个字符数组实际长度
tb :array of byte; //符数组
end;

procedure SetInit(aa: a);
begin
SetLength(a.ta, a.la);
SetLength(a.tb, a.lb);
end;
这是一种办法

你你的这4个成员域,如果允许,可以考虑减到2个成员,即去掉la,lb
动态的东西还是很好用的
 
to boy2002cn:
VARIANT是什么东西?

to icc:
你说的这个办法那似乎都没有用结构的理由了,我描述的结构实际上是简化了的,里面当然不止着两个数组,还有其他很多东西
 
结构体必须是定长的,你记错了
 
大家帮忙仔细想想,我记得应该是可以的,定义结构体的主要目地就是为了数据对位嘛

我记得以前在哪里看到过,可以根据前一个数据类型,决定后面一个数据的类型
 
这个行是行,但有个要求,被参照的必须是在编译期可求长的

const MaxLen = 254;
type T: array[0..Maxlen] of byte;
 
WordRec = packed record
case Integer of
0: (Lo, Hi: Byte);
1: (Bytes: array [0..1] of Byte);
end;
这样的?
它们指向的其实是同一段内存,大小一样,只是访问方式不同而已
 
谢谢大家了
ysai说的正是我要问的,但是不能解决我的问题,看起来只有写代码来读取了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部