type
ppara = ^tpara;
tpara=packed record
Command:array[0..3] of char;
Length:integer;
Reserverd:array[0..1] of byte;
Status:array[0..1] of byte;
Paralist:array[0..0] of byte;
end;var
b:array of byte;
i:integer;
begin
setlength(b,100);
for i=0 to 99 then
b[i]:= $01;
end;
我现在要把b数组的数据传到paralist,应该怎么做;
ppara = ^tpara;
tpara=packed record
Command:array[0..3] of char;
Length:integer;
Reserverd:array[0..1] of byte;
Status:array[0..1] of byte;
Paralist:array[0..0] of byte;
end;var
b:array of byte;
i:integer;
begin
setlength(b,100);
for i=0 to 99 then
b[i]:= $01;
end;
我现在要把b数组的数据传到paralist,应该怎么做;
Paralist:array[0..0] of byte;
Move(b[0], paralist[0],length(b))
执行这句就出错拉paralist:array of byte;
才是
setlength(Paralist,Length(B));
主要是paralist:array[0..0] of byte;
声明成0怎么能放数据
Paralist:array of byte;
//实际上只是一个指针而已,如非特殊类型的数据,可直接用pbytearray,当然长度得保证不超过tbytearray的长度
如果是可变动的长度,那么可以这样做 TByteArr = array[0..0] of Byte;
PBytearr = ^TByteArr;
tpara = packed record
Command : array[0..3] of char;
Length : integer;
Reserverd : array[0..1] of byte;
Status : array[0..1] of byte;
Paralist : PBytearr;
end;procedure TForm1.btn1Click(Sender: TObject);
var b : array of byte;
i : integer;
begin
setlength(b,5);
for i := 0 to 4 do b[i]:= i * $01;
GetMem(gtpara.Paralist,5 * SizeOf(gtpara.Paralist^));
CopyMemory(gtpara.Paralist,@b[0],5 * SizeOf(gtpara.Paralist^));
for i := 0 to 4 do ShowMessage(IntToStr(TByteArr(gtpara.Paralist^)[i]));
//访问的时候,你可以通过指针移动的方式来访问,而不能直接以下标的形式访问
//如:TByteArr(gtpara.Paralist^)[2] ;//错误
//通过指针移动的方式
inc(LongWord(gtpara.Paralist),2 * SizeOf(gtpara.Paralist^));
ShowMessage(IntToStr(Byte(gtpara.Paralist^)));
.....
...
...
Freemem(gtpara.Paralist,5 * SizeOf(gtpara.Paralist^));
b := nil;希望没有误导人....