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 长度不是固定的。所以不能用静态数组来操作。可是动态数组给的结果根本不是一回事

解决方案 »

  1.   

    楼主的第二种写法会出错的!数组长度只有四个,而你的循环却超过其上界,会溢出的。建议楼主使用PChar类型代替动态数组。
      

  2.   

    str:array [0..3]of byte; //这儿数组大小为4
    begin 
        conss:='ABC1234'; 
         for i:=0 to   Length(conss)-1(这儿应该等于6)  do 
          str[i] := byte(conss[i+1]);// 
    这儿越界了
      

  3.   

    对。那是写错了。因为我代码里测试的时候用的 4位长度没改过来。不过。无关越界的事情的。使用静态数组。在内存里查看时 得到的是 BYTE 后的数据。可是使用动态数组。在内存里看到的却始终都是一个值
    搞不明白阿
      

  4.   

    你测试过没有,一点错都没有
    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;
      

  5.   

    测试结果如下:
    Memo1
    65
    66
    67
    49
    50
    51
    52Memo2
    65
    66
    67
    49
    50
    51
    52
      

  6.   

    我估计是楼主没有注意到一个问题,就是SetLength函数会为你将一些类型的做初始化(设置为0或nil,请仔细看下帮助,如果懂汇编也可以跟一下汇编的代码)
    .而静态数组是没有给你做初始化的(一定要记住delphi只会为一些某些类型做初始化操作,而很多类型,特别是私有的一些变量编译器是不会为你做初始化操作的,所以你最好自己做初始化也不要相信编译器一定会为你做这个事),所以你每次运行数据在重新赋值前都是一样的。
      

  7.   

    下面是我写的测试代码,没有任何问题的呀!
    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;