一个byte数组问题

cp1982 2011-05-17 11:07:36
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,应该怎么做;
...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cp1982 2011-05-18
  • 打赏
  • 举报
回复
对,我就是要指针的做法,我试下,马上结贴给分,楼上的留个QQ号啊,我QQ38829979
mdejtod 2011-05-18
  • 打赏
  • 举报
回复
我只是解释一下 [0..0]的用法,当然你也可以改用其它的方式,比如动态数组,pbyte ,等等
mdejtod 2011-05-18
  • 打赏
  • 举报
回复
array[0..0] 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;

希望没有误导人....
hongqi162 2011-05-18
  • 打赏
  • 举报
回复
Paralist:array[0..0] of byte; 这里定义的是什么意思,要么你直接定义成动态数组
Paralist:array of byte;
弘石 2011-05-18
  • 打赏
  • 举报
回复
声明成动态数组才可以使用setlength
声明成0怎么能放数据
cp1982 2011-05-18
  • 打赏
  • 举报
回复
Paralist:array[0..0] of byte;

SetLength(Paralist,Length(B));
执行这句就出错拉

paralist:array of byte;
才是
setlength(Paralist,Length(B));
主要是paralist:array[0..0] of byte;
bdmh 2011-05-17
  • 打赏
  • 举报
回复
Move(b[0], paralist[0],length(b))
madyak 2011-05-17
  • 打赏
  • 举报
回复
SetLength(Paralist,Length(B));
Move(b[0], paralist[0],length(b))
cp1982 2011-05-17
  • 打赏
  • 举报
回复
这个我试过了,没用啊,我的paralist的定义
Paralist:array[0..0] of byte;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧