type 
  T4x4LongWordRecord = record
    case integer of
        0:( lws:array [0..3] of LongWord);
        1:(bs:array [0..16] of byte);
  end;

解决方案 »

  1.   

    type 
      T4x4LongWordRecord = record
        case integer of
            0:( lws:array [0..3] of LongWord);
            1:(bs:array [0..15] of byte);
      end;
      

  2.   


    //Tbytes 是动态数组,Type  T4x4LongWordRecord = array[0..3] of LongWord;  P4x4LongWordRecord = ^T4x4LongWordRecord;..
    var  Buf : TBytes;
      LR4 : T4x4LongWordRecord;
    begin
      ..Buf设置或者获取值
      if Length(Buf)>=SizeOf(LR4) then begin//判断长度
        LR4 := P4x4LongWordRecord(@Buf[0])^;    //强转类型,如果明白动态数组的含义,可以用以下这句:
        //LR4 := P4x4LongWordRecord(Buf)^;
      end;
    end;
      

  3.   

    1.不明白为什么可以直接强制转换呢?
    2.为什么有的时候用move也可以将值复制到为一个类型中?
    对这方面好晕,麻烦LS详细说明下下。
      

  4.   

    T16LongWordRecord=array [0..3] of T4x4LongWordRecord;var
     arr16LongWordRecord :T16LongWordRecord; 
     arr4x4LongWordRecord: T4x4LongWordRecord;
    System.Move(arr4x4LongWordRecord[0],arr16LongWordRecord, SizeOf(LongWord)* 16); 
      

  5.   

    1.不明白为什么可以直接强制转换呢?
    2.为什么有的时候用move也可以将值复制到为一个类型中?
    对这方面好晕,麻烦LS详细说明下下。
    这样不必再分配内存空间,强制转换:告诉编译器要访问的元素大小。