初学编程,请各位大神指教
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组成一个二维数组?
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组成一个二维数组?
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组。
(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);
再定义一个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);
如
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;当然也可以直接通指针来操作
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 这样
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;