Delphi 如何从TByteArray类型获取数组,作为TByteArray类型的较大数组的一部分?

Delphi 如何从TByteArray类型获取数组,作为TByteArray类型的较大数组的一部分?,delphi,pointers,dynamic-arrays,lazarus,freepascal,Delphi,Pointers,Dynamic Arrays,Lazarus,Freepascal,我定义了一个大型类型的动态数组aArray。现在,我们想在aArray中创建第二个阵列,在没有副本的情况下标记某个区域 type TByteArray = array of Byte; implementation procedure SomeCode; var aArray : TByteArray; bArray : TByteArray; begin setlength(aArray, 30); aArray[4] := 12; // here want to

我定义了一个大型类型的动态数组aArray。现在,我们想在aArray中创建第二个阵列,在没有副本的情况下标记某个区域

type
  TByteArray = array of Byte;

implementation

procedure SomeCode;
var 
  aArray : TByteArray;
  bArray : TByteArray;
begin
  setlength(aArray, 30);
  aArray[4] := 12;
  // here want to have bArray to hold 20 Bytes starting from Byte 5 in aArray 
  if bArray[0] = aArray[4] then begin
    writeln('All OK'); 
  end;

end;

这是不可能的。动态数组包含位于数组第一个元素之前的元数据。这与你想要一个第一个元素在另一个数组中间的动态数组不兼容。
您可能需要使用指向子数组第一个元素的指针来解决问题

这是不可能的。动态数组包含位于数组第一个元素之前的元数据。这与你想要一个第一个元素在另一个数组中间的动态数组不兼容。
您可能需要使用指向子数组第一个元素的指针来解决问题

如果你编辑你的问题并解释你为什么需要这样做,你可能会得到一个更符合你实际需要的答案。不知道你在使用什么编译器和语言也有点令人不安。是德尔福吗?是FPC吗?您是否正在编写在这两种情况下编译的代码?还是你只是希望加入Delphi标签来吸引更多的观众。我想这样做是为了访问aArray中具有不同含义的数据部分。这将使我能够优雅地访问原始数据块的这一部分。它帮助我写清楚的代码,而不需要这个位置计算偏移量+计数器等,并且它将保存一个复制操作。我猜是这样的。既然你已经得到了这个问题的答案,你最好发布一个新问题,包括你打算从数组中读取的数据的结构。@David Heffernan我所有的代码都在两个世界中运行。我用Delphi2007和LazarusFPC编译它。因此,我决定使用delphi和freepascal标记。如果您编辑您的问题并解释为什么需要这样做,您可能会得到一个更符合您实际需要的答案。不知道您使用的编译器和语言也有点令人不安。是德尔福吗?是FPC吗?您是否正在编写在这两种情况下编译的代码?还是你只是希望加入Delphi标签来吸引更多的观众。我想这样做是为了访问aArray中具有不同含义的数据部分。这将使我能够优雅地访问原始数据块的这一部分。它帮助我写清楚的代码,而不需要这个位置计算偏移量+计数器等,并且它将保存一个复制操作。我猜是这样的。既然你已经得到了这个问题的答案,你最好发布一个新问题,包括你打算从数组中读取的数据的结构。@David Heffernan我所有的代码都在两个世界中运行。我用Delphi2007和LazarusFPC编译它。因此,我决定使用delphi和freepascal标记。感谢这个清晰的答案,我怀疑是这样的。@David:指向子数组第一个元素和相关长度的指针。感谢这个清晰的答案,我怀疑是这样的。@David:指向子数组第一个元素和相关长度的指针。