我自己定义了一个record,比如
TPacket=record
command:array[0..19] of char;
data:array[0..491] of char;
end;再定义一个数组:
inbin:array[0..511] of char;小弟我刚使用delphi不久,对delphi还不是太熟,
请问能使两者之间进行类型转换吗?当然,在c中能轻易实现,但在object pascal中可以吗?
望各位高手不吝赐教 !
TPacket=record
command:array[0..19] of char;
data:array[0..491] of char;
end;再定义一个数组:
inbin:array[0..511] of char;小弟我刚使用delphi不久,对delphi还不是太熟,
请问能使两者之间进行类型转换吗?当然,在c中能轻易实现,但在object pascal中可以吗?
望各位高手不吝赐教 !
(1)不能直接进行类型转换;
(2)可以利用空结束串和零基字符数组之间的赋值兼容性实现类型转换的效果。
Demo:type
TPacket = record
Command: array[0..19] of Char;
Data: array[0..43] of Char;
end;
{ Data的尺寸改小是为了在显示串时对话框不会太宽 } TChArr = array[0..63] of Char;procedure Test;
var
P: TPacket;
C: TChArr;
I: Integer;
S: string;
begin
{ 下面两行语句用于向 C 赋值 }
for I := 0 to 19 do P.Command[I] := 'C';
for I := 0 to 43 do P.Data[I] := 'D';
{ 下面的语句用于把 C 的值赋给 P }
StrCopy(PChar(@C),
PChar(string(PChar(@P.Command[0])) +
string(PChar(@P.Data[0]))));
{ 下面三行语句用于测试 P 的值 }
S := '';
for I := 0 to 63 do S := S + C[I];
ShowMessage(S);
{ 下面的语句用于清除 C 的值 }
FillChar(P, 64, #0);
{ 下面的语句用于把 P 的值赋给 C }
StrCopy(PChar(@P.Command[0]), PChar(@C[0]));
{ 或者更为规范的分成下面两条语句执行
StrLCopy(PChar(@P.Command[0]), PChar(@C[0]), 20);
StrLCopy(PChar(@P.Data[0]), PChar(@C[20]), 44);
}
{ 下面的语句用于测试 C 的值 }
S := '';
for I := 0 to 19 do S := S + P.Command[I];
for I := 0 to 43 do S := S + P.Data[I];
ShowMessage(S);
end;顺便建议,回答问题的人不要动不动就以老师的口气教训初学者。更何况你根本没解决什么问题(比如楼上的)。
Type
PMyRecord = ^TMyRecord;
TMyRecord = packed record
Code : Array [0..4] of char;
Name : array [0..9] of char;
end;
VAR
NewRec2 : array [0..14]of char;
MRec : TMyRecord;
begin
NewRec2 := '012345678901234';
Move(NewRec2,MRec,sizeof(MRec));
Showmessage(mrec.code);
showmessage(mrec.name);
end;