为什么我的新 BitArray 初始化时使用了错误的值?

Why is my new BitArray initializing with the wrong value?

背景

我这里有一个控制台应用程序,其中发生了以下事情...

  1. user/operator 在控制台中输入一串位,即“0101”。 - 作品
  2. 位串被转换成一个字节。 - 作品
  3. 使用我的反转方法反转字节数组。 - 作品
  4. 我在控制台打印出反转的字符串window。 - 不起作用

我的问题是这里的 4 号。我用新反转的 reversedBits 值创建了一个位数组,这就是事情似乎出错的地方。就好像 reversedBitArray 是用 old/un-reversed bits 值而不是 reversedBits 初始化的,因为我的输出似乎总是未反转的字符串。这个错误看起来应该是微不足道的,reversedBits 是正确反转的值,所以声明 reversedBitArray 有一些问题,但我不知道是什么。下面是我所有的源代码,包括:

主控制台应用程序。

static void Main(string[] args)
{
    BitArray reversedBitArray = null;
    String bitString = String.Empty;
    byte reversedBits = 0;
    byte bits = 0;

    // prompt the user to enter a string of bits
    Console.WriteLine("Enter a string of bits here: ");

    // wait for the user to enter the string of bits
    bitString = Console.ReadLine();

    // convert the string of bits into an integer
    bits = Convert.ToByte(bitString, 2);

    // reverse all of the bits
    reversedBits = ReverseBits(bits);

    // display the reversed bits
    Console.WriteLine("\nThe reversed bit string is...");
    reversedBitArray = new BitArray(new byte[] { reversedBits });
    foreach (bool value in reversedBitArray)
    {
        Console.Write(Convert.ToInt32(value));
    }

    // wait for the user to exit
    Console.WriteLine("\n\nPress any key to exit...");
    while (!Console.KeyAvailable)
    {
        Thread.Sleep(100);
    }

    // exit the console application
    Environment.Exit(0);
}

位反转法

static byte ReverseBits(byte x)
{
    BitArray myBitArray
    byte[] singleElementArray = null;
    int bitArrayMidPoint = 0;
    int bitArrayLength = 0;

    // get a bit array
    myBitArray = new BitArray(new byte[] { x });

    // get the length and mid-point
    bitArrayLength = myBitArray.Length;
    bitArrayMidPoint = (bitArrayLength / 2);

    // start the reversal
    for (int i = 0; i < bitArrayMidPoint; i++)
    {
        bool bit = myBitArray[i];
        myBitArray[i] = myBitArray[bitArrayLength - i - 1];
        myBitArray[bitArrayLength - i - 1] = bit;
    }

    // back to a byte
    singleElementArray = new byte[1];
    myBitArray.CopyTo(singleElementArray, 0);

    // return the reversed value
    return singleElementArray[0];
}

这是我在控制台 运行 中的示例输出 window。

根据其他用户的建议,这是我使用的对我有用的修复程序。

static void Main(string[] args)
{
    BitArray reversedBitArray = null;
    String bitString = String.Empty;
    byte reversedBits = 0;
    byte bits = 0;

    // prompt the user to enter a string of bits
    Console.WriteLine("Enter a string of bits here: ");

    // wait for the user to enter the string of bits
    bitString = Console.ReadLine();

    // convert the string of bits into an integer
    bits = Convert.ToByte(bitString, 2);

    // reverse all of the bits
    reversedBits = ReverseBits(bits);

    // display the reversed bits
    Console.WriteLine("\nThe reversed bit string is...");
    reversedBitArray = new BitArray(new byte[] { reversedBits });
    for (int i = (reversedBitArray.Length - 1); i > 0; i--)
    {
        Console.Write(Convert.ToInt32(reversedBitArray[i]));
    }

    // wait for the user to exit
    Console.WriteLine("\n\nPress any key to exit...");
    Console.ReadKey();

    // exit the console application
    Environment.Exit(0);
}

这只是以相反的顺序打印 BitArray 的值。这是新的示例输出。