组合多个TBytes数组的最佳方法

5

如何最好地合并 TBytes 数组?

所有数组的大小都相同。我想将 Array2 的内容添加到 Array1 的末尾,将 Array3 添加到 Array2 的末尾,以此类推。


1
定义“合并”。您是指将一个附加到另一个的末尾,还是交错排列(array1 [0],array2 [0],array1 [1],array2 [1])?它们大小相同吗?请编辑您的问题以使其更清晰,以便我们可以尝试帮助您。谢谢 :) - Ken White
所有的数组大小都相同,我希望像这样将array1附加到array2,再附加到array3...... - Vinamra Bhantagar
2个回答

9
为了合并两个TBytes,您需要分配一个第三个TBytes,其长度为两个单独的TBytes的总长度,然后将两者的字节复制到其中。例如:
var
  arr1, arr2, merged: TBytes;
begin
  ...
  SetLength(merged, Length(arr1) + Length(arr2));
  if arr1 <> nil then Move(arr1[0], merged[0], Length(arr1));
  if arr2 <> nil then Move(arr2[0], merged[Length(arr1)], Length(arr2));
end;

这并没有回答问题,问题是如何“循环遍历它们”来实现。 - Ken White
我理解这个问题是在问如何遍历一个数组列表,而不是如何遍历特定数组的内容。 - Remy Lebeau
我不确定它怎么可能。"如何通过循环合并TBytes数组" - "通过循环合并"的哪个部分表明了"循环遍历数组列表"?如果问题是"如何修复我的法拉利的燃油喷射系统",那么答案不是"购买混合动力车型 - 它们对环境更好"(虽然在回答原始问题后提供这个有效(可能更好)的替代方案也许是一个好主意)。 :) - Ken White
“通过它们”有点含糊不清。它可能意味着“通过它们的集合”,也可能意味着“通过它们的内容”。我认为Vinamra需要澄清问题。 - Remy Lebeau

2

您可以使用类似字符串的操作:

var
  LArray1, LArray2, LMerged: TBytes;
begin
  ...
  LMerged := LArray1 + LArray2;
end;

或者您可以使用系统的“Concat”函数:

var
  LArray1, LArray2, LMerged: TBytes;
begin
  ...
  LMerged := Concat(LArray1, LArray2);
end;

不使用XE2,因为这是问题标记的内容。 - Sertac Akyuz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接