从整数初始化BitArray

本文关键字:BitArray 初始化 整数 | 更新日期: 2023-09-27 18:19:58

我正在尝试从整数值初始化System.BitArray实例。然而,我似乎没有得到正确的值。

我的代码是

        var b = new BitArray(BitConverter.GetBytes(0xfa2));
        for (int i = 0; i < b.Count; i++)
        {
            char c = b[i] ? '1' : '0';
            Console.Write(c);
        }
        Console.WriteLine();

我也尝试过没有BitConverter:

        var b = new BitArray(new int[] { 0xfa2 });

但这些尝试似乎都没有奏效。以下是这里建议的尝试:在.NET 中将int转换为位数组

我的输出:01000101111100000000000000000000。预计输出:11111 0100010。

任何帮助都将不胜感激!

从整数初始化BitArray

您的循环方向错误。试试这个:

    var b = new BitArray(BitConverter.GetBytes(0xfa2));
    for (int i = b.Count-1; i >= 0; i--)
    {
        char c = b[i] ? '1' : '0';
        Console.Write(c);
    }
    Console.WriteLine();

这是一个小终结点与大终结点的问题,因此您需要考虑hw架构的终结点。此外,根据文档,您需要更改打印BitArray的方式。

byte[] buffer = BitConverter.GetBytes((ushort)0xfa2);
if (BitConverter.IsLittleEndian) Array.Reverse(buffer);
var b = new BitArray(buffer);
for (int i = 0; i < b.Count; i+=8)
{
    for (int j=i + 7; j >= i; j--)
    {
        char c = b[j] ? '1' : '0';
        Console.Write(c);
    }
}
Console.WriteLine();

参考:

  • 来自BitArray构造函数文档

数组中的第一个字节表示位0到7,第二个字节表示字节表示位8到15,依此类推。最低有效位每个字节的位表示最低索引值:"字节[0]和1"表示位0,"字节[0]和2"表示位1,"字节[0]和4"表示比特2,依此类推。

如文档BitArray Constructor(Int32[])所述:

第一个值数组元素中的数字表示位0到31,数组中的第二个数字表示位32到63,依此类推。每个整数的最低有效位表示最低索引值:"values[0]和amp;1"表示位0,"values[0]&2"表示位1,"values[0]和4"表示位2,依此类推

当使用此构造函数时,不需要检查端序,只需颠倒输出顺序:

var b = new BitArray(new int[] { 0xfa2 });
// skip leading zeros, but leave least significant bit:
int count = b.Count;
while (count > 1 && !b[count-1])
    count--;
// output
for (int i = count - 1; i >= 0; i--)
{
    char c = b[i] ? '1' : '0';
    Console.Write(c);
}
Console.WriteLine();