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

时间:2016-03-14 14:20:54

标签: c# bit-manipulation byte console-application bit

背景

我在这里有一个控制台应用程序,会发生以下情况...

  1. 用户/操作员在控制台中输入一串位,即" 0101"。 - 工作
  2. 比特串转换为字节。 - 工作
  3. 使用我的反向方法反转字节数组。 - 工作
  4. 我在控制台窗口中打印出反向的String。 - 不能工作
  5. 我的问题是这里的第4号。我从新反转的reversedBits值中创建了一个位数组,这就是出现问题的地方。好像reversedBitArray正在使用旧的/未反转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];
    }
    

    以下是我在控制台窗口中运行的示例输出。

    Sample Problem Console Window

1 个答案:

答案 0 :(得分:0)

正如其他用户所建议的那样,我使用的修复程序适用于我。

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的值。这是新的示例输出。

Sample Solution Console Window