var i:integer;
str:array of byte;
begin
conss:='ABC1234';
SetLength(str,length(conss);
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);//和var i:integer;
str:array [0..3]of byte;
begin
conss:='ABC1234';
// SetLength(str,length(conss);
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);//
这2种 方式。在内存中。数组的值不一样。。什么原因?因为要操作的CONSS 长度不是固定的。所以不能用静态数组来操作。可是动态数组给的结果根本不是一回事
str:array of byte;
begin
conss:='ABC1234';
SetLength(str,length(conss);
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);//和var i:integer;
str:array [0..3]of byte;
begin
conss:='ABC1234';
// SetLength(str,length(conss);
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);//
这2种 方式。在内存中。数组的值不一样。。什么原因?因为要操作的CONSS 长度不是固定的。所以不能用静态数组来操作。可是动态数组给的结果根本不是一回事
begin
conss:='ABC1234';
for i:=0 to Length(conss)-1(这儿应该等于6) do
str[i] := byte(conss[i+1]);//
这儿越界了
搞不明白阿
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
str:array of byte;
conss:string;
begin
conss:='ABC1234';
SetLength(str,length(conss));
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);
for i:=0 to 6 do
memo1.Lines.Add(inttostr(str[i]));
SetLength(str,0);
end;procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
str:array [0..6]of byte;
conss:string;
begin
conss:='ABC1234';
for i:=0 to Length(conss)-1 do
str[i] := byte(conss[i+1]);
for i:=0 to 6 do
memo2.Lines.Add(inttostr(str[i]));
end;
Memo1
65
66
67
49
50
51
52Memo2
65
66
67
49
50
51
52
.而静态数组是没有给你做初始化的(一定要记住delphi只会为一些某些类型做初始化操作,而很多类型,特别是私有的一些变量编译器是不会为你做初始化操作的,所以你最好自己做初始化也不要相信编译器一定会为你做这个事),所以你每次运行数据在重新赋值前都是一样的。
var
i: Integer;
s: String;
A1: array of Byte;
A2: array [0..6] of Byte;
begin
s := 'ABCDEFG';
SetLength(A1, Length(S));
for i := Low(A1) to High(A1) do
A1[i] := Byte(s[i + 1]); for i := Low(A2) to High(A2) do
A2[i] := Byte(s[i + 1]); SetLength(A1, 0);
end;