如何将 BitArray 转换为单个 int?

发布于 2024-10-21 18:26:51 字数 171 浏览 1 评论 0原文

如何转换 BitArray 到单个 int

How can I convert BitArray to a single int?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寄风 2024-10-28 18:26:51
private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];

}
private int getIntFromBitArray(BitArray bitArray)
{

    if (bitArray.Length > 32)
        throw new ArgumentException("Argument length shall be at most 32 bits.");

    int[] array = new int[1];
    bitArray.CopyTo(array, 0);
    return array[0];

}
人间不值得 2024-10-28 18:26:51

此版本:

  • 适用于最多 64 位
  • 不依赖于 BitArray 实现细节的知识
  • 不会不必要地分配内存
  • 不会抛出任何异常(如果您期望更多位,请随意添加检查)
  • 应该具有合理的性能

执行:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}

This version:

  • works for up to 64 bits
  • doesn't rely on knowledge of BitArray implementation details
  • doesn't needlessly allocate memory
  • doesn't throw any exceptions (feel free to add a check if you expect more bits)
  • should be more than reasonably performant

Implementation:

public static ulong BitArrayToU64(BitArray ba)
{
    var len = Math.Min(64, ba.Count);
    ulong n = 0;
    for (int i = 0; i < len; i++) {
        if (ba.Get(i))
            n |= 1UL << i;
    }
    return n;
}
蘑菇王子 2024-10-28 18:26:51
private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}
private int getIntFromBitArray(BitArray bitArray)
{
    int value = 0;

    for (int i = 0; i < bitArray.Count; i++)
    {
        if (bitArray[i])
            value += Convert.ToInt16(Math.Pow(2, i));
    }

    return value;
}
水水月牙 2024-10-28 18:26:51

参考这篇文章(#43935747)。值 X 很短,我设置了两个位(6 和 10),如下所示:
短X=1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

现在我想读取 Value X 中的特定所有位并将其放入数组或位类型中,例如 bool Val1= bit1, bool Val2=bit2....

我是新手,我认为这对于你们这些家伙..

Reffering to this post (#43935747). A value X is short tpe whic I set two bits (6 and 10) like below:
short X=1;

        var result = X;
        var bitsToSet = new [ ] { 5,9 };
        foreach ( var bitToSet in bitsToSet )
            {
            result+=( short ) Math.Pow ( 2,bitToSet );
            }
        string binary = Convert.ToString ( result,2 );

Now I would like to read the specific all bits from Value X and put it in to an array or a bit type like bool Val1= bit1, bool Val2=bit2....

I am a newbie and I think it is pretty simple for you guyes..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文