为什么我的新 BitArray 初始化时使用了错误的值?
Why is my new BitArray initializing with the wrong value?
背景
我这里有一个控制台应用程序,其中发生了以下事情...
- user/operator 在控制台中输入一串位,即“0101”。 - 作品
- 位串被转换成一个字节。 - 作品
- 使用我的反转方法反转字节数组。 - 作品
- 我在控制台打印出反转的字符串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 的值。这是新的示例输出。
背景
我这里有一个控制台应用程序,其中发生了以下事情...
- user/operator 在控制台中输入一串位,即“0101”。 - 作品
- 位串被转换成一个字节。 - 作品
- 使用我的反转方法反转字节数组。 - 作品
- 我在控制台打印出反转的字符串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 的值。这是新的示例输出。