在 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();
假设所有数组(例如,source1
、source2
、source3
)的长度都是相同的,并且这个长度是一个偶数 (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 检查)。