在 C# 中将 3 字节数组合并为单个数组
本文关键字:数组 合并 单个 字节数 字节 中将 | 更新日期: 2023-09-27 18:31:00
我有三个字节数组,长度为40000。我想将字节数组 1 的字节数组索引 0,1 合并,然后将 bytearaay2 的索引 0,1 和字节数组 3 的索引合并为 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 字节数组合并为单个数组作为一对分组。
前提是所有数组(例如,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 倍,然后在交错后修剪到适当的大小,则还可以简化循环(删除 if 检查)。
在 C# 3.0 中,您可以使用 LINQ:
Byte[] combinedByte = bytearray1.Concat(bytearray2).ToArray();
Byte[] combinedByte = combinedByte.Concat(bytearray3).ToArray();