如何使用c#将二进制数转换为它的十进制值

时间:2014-03-21 10:08:09

标签: c# binary

!!!! ANSWERED !!!!

我无需帮助完成简单的位操作程序。

  1. 询问用户输入数字
  2. 打印数字的二进制表示
  3. 询问用户位位置和位值
  4. 应用更改
  5. 显示用户在二进制文件中所做的更改
  6. ??????将该更改再次转换为数字。 ??????????
  7. 我只需要对第5步提供一些帮助,因为您将从我的代码中看到我是一个完整的菜鸟,所以请不要笑:)任何帮助都将深受赞赏。

            Console.WriteLine("Enter integer number");
            int number = Convert.ToInt32(Console.ReadLine());
            string binaryString = Convert.ToString(number, 2);
            Console.WriteLine("The binary representation of {0} is", number);
            Console.WriteLine(binaryString.PadLeft(16, '0'));
    
    
            BitArray b = new BitArray(new int[] { number }); 
    
    
            Console.WriteLine("Enter bit's position (0 to 15)");
            int position = Convert.ToInt32(Console.ReadLine());
    
            Console.WriteLine("Enter bit's value (true or false)");
            bool value = Convert.ToBoolean(Console.ReadLine());
    
            b.Set(position, value); //set value to given position based on input from the user
    
            Console.WriteLine("Your changes transformed \n{0} \nto ",binaryString.PadLeft(16,'0'));
    
            for (int i = 15; i >= 0; i--) 
            {
                if (b[i] == true)
                {
                    Console.Write(1);
                }
                else
                {
                    Console.Write(0);
                }
    
            }
            Console.WriteLine();
    

3 个答案:

答案 0 :(得分:2)

Convert.ToInt32有一个重载,它接受用于整数

的字符串表示的基数
 Console.WriteLine(Convert.ToInt32(binaryString, 2))

但是,在更改了BitArray中的位之后,要使用Convert.ToInt32,您需要将比特数组重新转换为字符串

此代码改编自another answer此处SO

.....
binaryString = ToBitString(b);
Console.WriteLine(Convert.ToInt32(binaryString, 2))
.....


public string ToBitString(BitArray bits)
{
    var sb = new StringBuilder();
    for (int i = bits.Count - 1; i>= 0; i--)
    {
        char c = bits[i] ? '1' : '0';
        sb.Append(c);
    }
    return sb.ToString();
}

答案 1 :(得分:0)

将二进制表示存储到变量中:

string binary = binaryString.PadLeft(16, '0');
Console.WriteLine(binary);

然后得到位置和值:

 Console.WriteLine("Enter bit's position (0 to 15)");
 int position = Convert.ToInt32(Console.ReadLine());

 Console.WriteLine("Enter bit's value (true or false)");
 bool value = Convert.ToBoolean(Console.ReadLine());

进行更改:

var chars = binary.ToCharArray();
chars[position] = value ? '1' : '0';
binary = new string(chars);

显示新的二进制表示及其十进制等值:

Console.WriteLine("New binary value: {0}",binary);
Console.WriteLine("New decimal value: {0}", Convert.ToInt32(binary, 2));

答案 2 :(得分:0)

将最终循环更改为以下内容:

int v = 0;
for (int i = 15; i >= 0; i--)
{
   if (b[i] == true)
   {
       Console.Write(1);
       v += (int)Math.Pow(2, i);
   }
   else
   {
       Console.Write(0);
   }
}