record转array of byte类型该怎么转? ( 积分: 100 )

  • 主题发起人 主题发起人 qqnm
  • 开始时间 开始时间
Q

qqnm

Unregistered / Unconfirmed
GUEST, unregistred user!
我有几个record的类型,想把他们放到一个数组中去,record里面也包括#0等不可见字符,该怎么转啊?
例如:
Raaa = record
a1:string;
a2:string;
end;
Rbbb = record
b1:string;
b2:string;
end;
ccc:array of byte;
/////////
Raaa.a1:='1111'+chr(0);
Raaa.a2:='2222'+chr(13)+'2222'
Rbbb.b1:='33333';
Rbbb.b2:='44444';
如何将Raaa.a1和Raaa.a2和Rbbb.b1和Rbbb.b2一块付给ccc?
 
我有几个record的类型,想把他们放到一个数组中去,record里面也包括#0等不可见字符,该怎么转啊?
例如:
Raaa = record
a1:string;
a2:string;
end;
Rbbb = record
b1:string;
b2:string;
end;
ccc:array of byte;
/////////
Raaa.a1:='1111'+chr(0);
Raaa.a2:='2222'+chr(13)+'2222'
Rbbb.b1:='33333';
Rbbb.b2:='44444';
如何将Raaa.a1和Raaa.a2和Rbbb.b1和Rbbb.b2一块付给ccc?
 
ccc := byte('$'+Raaa.a1)
自己用循环写吧,思路应该是这样
 
有一个办法,但是移植性不强.
就是利用Raaa和Rbbb的存储结构来想办法.
给你写个demo你看看.
function MyCopy(p:pointer;cnt:integer):string;
var
pstr:pstring;
l:string;
i:integer;
strList:TStringList;
begin
result:='';
for i:=1 to cnt do
begin
pstr:=pstring(integer(p)+(i-1)*4);
result:=result+pstr^;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
a:Ta;
b:Tb;
str:string;
cc:array of byte;
begin
a.A1:='123';
a.a2:='456';
b.b1:='789';
b.b2:='abc';
str:=MyCopy(@a,2)+MyCopy(@b,2);
setlength(cc,length(str));
copymemory(@cc[0],@str[1],length(str));
end;
 
接受答案了.
 
后退
顶部