You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简便合并多个BitArray并转换为48字节byte[]用于UDP传输?

合并多个BitArray为48字节byte[]的简便实现

核心思路

先确保所有BitArray的总位数刚好是384位(对应48字节),再将各个BitArray的位按顺序合并到一个总长度为384的BitArray中,最后把合并后的BitArray转换为byte[]即可。

实现方案一:高效直接的位复制

这种方法通过手动控制偏移量逐个复制位,性能稳定、逻辑清晰:

// 初始化各个BitArray(示例)
BitArray a1 = new BitArray(3);
BitArray a2 = new BitArray(11);
BitArray a3 = new BitArray(14);
// ...其他需要合并的BitArray

// 计算总位数,校验是否符合48字节要求
int totalBits = a1.Count + a2.Count + a3.Count; // 需包含所有要合并的BitArray
if (totalBits != 48 * 8)
{
    throw new InvalidOperationException("所有BitArray的总位数必须为384位(48字节)");
}

// 创建用于合并的目标BitArray
BitArray combinedBitArray = new BitArray(384);
int currentOffset = 0;

// 逐个复制每个BitArray的位到目标数组
CopyBits(a1, combinedBitArray, ref currentOffset);
CopyBits(a2, combinedBitArray, ref currentOffset);
CopyBits(a3, combinedBitArray, ref currentOffset);
// 继续复制后续的BitArray...

// 转换为最终的byte[]
byte[] result = new byte[48];
combinedBitArray.CopyTo(result, 0);

// 辅助复制方法
void CopyBits(BitArray source, BitArray target, ref int offset)
{
    for (int i = 0; i < source.Count; i++)
    {
        target[offset + i] = source[i];
    }
    offset += source.Count;
}

实现方案二:简洁的LINQ拼接

如果不追求极致性能,用LINQ可以写出更简洁的代码,适合快速实现:

// 初始化各个BitArray
BitArray a1 = new BitArray(3);
BitArray a2 = new BitArray(11);
BitArray a3 = new BitArray(14);
// ...其他需要合并的BitArray

// 拼接所有BitArray的位
var allBits = a1.Cast<bool>()
                .Concat(a2.Cast<bool>())
                .Concat(a3.Cast<bool>())
                // 追加其他BitArray的Cast<bool>()
                .ToArray();

// 校验总位数
if (allBits.Length != 48 * 8)
{
    throw new InvalidOperationException("总位数必须为384位");
}

// 转换为byte[]
BitArray combinedBitArray = new BitArray(allBits);
byte[] result = new byte[48];
combinedBitArray.CopyTo(result, 0);

注意事项

  • 必须保证所有BitArray的总位数恰好是384位,否则转换后的byte[]长度会不符合要求,若需要补位需额外处理逻辑。
  • BitArray.CopyTo方法会自动处理字节对齐,无需手动调整。

内容的提问来源于stack exchange,提问作者Azriel H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:42