初学编程,请各位大神指教
procedure TForm1.Button1Click(Sender: TObject);
var
    data : array [0..14] of byte;
begin
  data[0..14] := ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A);
end怎么就出错了...另外问一下怎么让这个数组以第一列都是OE组成一个二维数组?

解决方案 »

  1.   

     var 
       a: array[0..14] of Byte= ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A)
    写到全局变量     a: array[0..1,0..14] of Byte= (($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A),
         ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A)) ;
    多维的这样写2组。
      

  2.   

    @vividw
    (vividw)谢谢你的解答,我在var前面写成const data : array [0..14] of byte = ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A);编译通过了...
    可能我解释的不够清楚,现在我得到的要求是这样,知道一个全局变量是个一维的十六进制数组ReceiveData,数组长度未知,现在我是想把这个数组的值赋值给data,然后再将data改成一个二维数组sendData,二维数组的第一列的值是OE,共5列,后边列的值分别取自data的OE值的后4位,像这样
    sendData[0, ] = ($0E,$12,$FF,$FF,$00);//不知道delphi有没有类似sendData[0][]这样的写法
    如果我是这么做的话,data的值是不是不能写到全局变量了呢?
    delphi有没有声明动态数组然后根据赋值决定自身的长度?
    比如C里边的int array[] = (1,2,3,4);
      

  3.   

    变量类型是事先定义好的,不能中途再改变
    再定义一个2维数组变量吧,可以定义成动态的数组,动态2维数组这样定义:
    //i X j二维数组
    type  TArr =  array of array of string;
    var Arr:TArr;SetLength(Arr,i,j);或者:
    var Arr:array of array of string;SetLength(Arr,i);
    for k:=Low(Arr) to High(Arr) do
    SetLength(Arr[k],j);
      

  4.   

    不同数据结构的数据赋值 我喜欢用record 来做

    type
       Ptest=^TTest;
       TTest=packed record
         case Integer of
         1:(buf1:array[0..14*3]of byte);
         2:(buf2:array[0..1,0..14] of Byte);
       end;procedure TForm1.Button1Click(Sender: TObject);
    var
      datas:array of Byte;  I:Integer;
      T:Ptest;
      iPos:Integer;
    begin
      SetLength(datas,1024*1024);  iPos:=0;
      while iPos<Length(datas) do
      begin
        T := @datas[iPos];
        
        iPos:=iPos+sizeof(ttest);
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var  P:PChar;
      bufsize:Integer;
      I:Integer;
      T:Ptest;
      iPos:Integer;
    begin  iPos:=0;
      while iPos<bufsize do
      begin
        T := Ptest(P);
        P:=P+sizeof(ttest);
      end;
    end;当然也可以直接通指针来操作
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      data : array [0..14] of byte= ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A);
    begin
      data[0]:=$0E;
    end 这样
      

  6.   

    经过各位大神的指教,小弟写出了这样的东西...虽然完成目的了,但是经验不足,在循环的处理上有些绕,希望大家指正,
    procedure TForm1.Button1Click(Sender: TObject);
    const
      data : array[0..14]of byte = ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A);
    var
        //data1:array of byte;
        sendData:array of array of byte;
        i,j,m,datalength,arrColume: integer;
        showstring:String;
    begin
      //data[0..14] := ($0E,$12,$FF,$FF,$00,$0E,$13,$FF,$FF,$00,$FE,$FE,$FE,$FE,$2A);
      datalength := High(data)+1;    //取得16进制数组的长度
    {//这个步骤可以根据data的长度赋值给data1了,多亏3L,4L指点
      SetLength(data1,datalength);
      for i:=0 to datalength-1 do
      begin
        data1[i] := data[i];
        showmessage(Format('%.2x',[data1[i]]));
      end;
    }
      arrColume := 0;
      i := 0;
      while(i<datalength)do         //计算sendData的列
      begin
        if(data[i] = $0E) then
          inc(arrRow);
        inc(i,5);
      end;
      SetLength(sendData,arrRow,5); //设置sendData的列长
      i := 0;
      m := 0;
      //sendData赋值
      while(i<arrRow)do
      begin
        while(m<datalength) do
        begin
          if(data[m] = $0E) then
          begin
            for j := 0 to 4 do
            begin
              //showmessage(Format('%x',data[m,j]));
              sendData[i,j] := data[m+j];
            end;
            inc(i);
            inc(m,5);
          end
          else
          begin
            inc(m);
            break;
          end;
        end;
      end;
      //调式sendData
      for i:= 0 to arrRow-1 do
      begin
        showstring := '';
        for j := 0 to 4 do
        begin
          showstring := showstring + Format('%.2x',[sendData[i,j]]) + ' ';
          //showmessage(Format('%.2x',[sendData[i,j]]));
        end;
       showmessage(showstring);
      end;
    end;