在 C# 中将 3 个 bytearray 合并为单个 bytearray

merge 3 bytearray into single one in c#

我有三个 bytearray,长度为 40000。我想合并字节数组 1 的字节数组索引 0,1,然后 bytearay2 的索引 0,1 和 bytearray3 的索引合并到 40000长度。

像这样:

场景:

a1[0]a1[1]a2[0]a2[1]a3[0]a3[1]a1[2]a1[3]a2[2]a2[3]a3[2]a3[3] ...

and then so on up to 40000.

所以最后我想将 3 字节数组合并为单个数组作为一对分组。

C# 3.0 中,您可以使用 LINQ:

Byte[] combinedByte = bytearray1.Concat(bytearray2).ToArray();
Byte[] combinedByte = combinedByte.Concat(bytearray3).ToArray();

假设所有数组(例如,source1source2source3)的长度都是相同的,并且这个长度是一个偶数 (40000):

  Byte[] result = new Byte[source1.Length * 3];

  for (int i = 0; i < source1.Length / 2; ++i) {
    result[i * 6] = source1[2 * i];
    result[i * 6 + 1] = source1[2 * i + 1];

    result[i * 6 + 2] = source2[2 * i];
    result[i * 6 + 3] = source2[2 * i + 1];

    result[i * 6 + 4] = source3[2 * i];
    result[i * 6 + 5] = source3[2 * i + 1];
  }

只是一个 for 循环

int resultIndex = 0;
int groupingIndex = 0;
int maxLength = 40000;
while (resultIndex < maxLength)
{
   result[resultIndex] = source1[groupingIndex];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   result[resultIndex] = source1[groupingIndex+1];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   result[resultIndex] = source2[groupingIndex];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   result[resultIndex] = source2[groupingIndex+1];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   result[resultIndex] = source3[groupingIndex];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   result[resultIndex] = source3[groupingIndex+1];
   resultIndex++;
   if (resultIndex >= maxLength) break;
   groupingIndex = groupIndex + 2;
}

您显然可以使用一些辅助函数来分解它。如果您允许结果最初是源长度大小的 3 倍,然后 trim 在交错后变为适当的大小,您还可以简化循环(删除 if 检查)。