我自己定义了一个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中可以吗?
望各位高手不吝赐教 !

解决方案 »

  1.   

    应该不能直接转换。delphi中对类型要求很严格,不妨查一下帮助!
      

  2.   

    不好意思,我认为:
    (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;顺便建议,回答问题的人不要动不动就以老师的口气教训初学者。更何况你根本没解决什么问题(比如楼上的)。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    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;