发现文件写入时的一个非常奇怪的现象,懂的朋友来帮我解答一下 ( 积分: 100 )

  • 主题发起人 主题发起人 不要踩我
  • 开始时间 开始时间

不要踩我

Unregistered / Unconfirmed
GUEST, unregistred user!
我的主要实现的功能就是要将
88485022写到文件并且使用16进制编辑器查看地址0处的数值为 88 48 50 22
下面的代码使用了一个setlength,结果为A8 3F D5 00,这是不对的,然而如果去掉
setlength,并把 nbytes: array of Byte;这句改为nbytes: array [0..3]of Byte;
显示的结果又对了,这是为什么?

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
k, i,art: Integer;
nbytes: array of Byte;
begin
s := '88485022';
i := Length(s) div 2;
SetLength(nbytes, i);
for k := 0 to i - 1 do begin
nbytes[k] := strtoint('$'+Copy(s, 2 * k + 1, 2));
end;

t:=FileOpen('ww.txt', fmOpenWrite or fmShareDenyWrite);
FileSeek(t,0,soFromBeginning);
FileWrite(t,Byte(nbytes),i);
FileClose(t);

end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
k, i,art: Integer;
nbytes: array of Byte;
begin
s := '88485022';
i := Length(s) div 2;
SetLength(nbytes, i);
for k := 0 to i - 1 do begin
nbytes[k] := strtoint('$'+Copy(s, 2 * k + 1, 2));
end;

t:=FileOpen('ww.txt', fmOpenWrite or fmShareDenyWrite);
FileSeek(t,0,soFromBeginning);
FileWrite(t,Byte(nbytes),i);
FileWrite(t,nbytes[0],i);//或者 FileWrite(t,@nbytes[0],i);这里必须取nbytes[0]的地址
FileClose(t);

end;
 
数组nbytes的首地址不就是@nbytes[0]吗?两个写法不都一样吗
 
谢谢,先给你分数
 
不一样的,动态数组相当于指针,这么说明白了吗?
 
后退
顶部