【问题标题】:how to convert a number in binary to its decimal value using c#如何使用c#将二进制数字转换为十进制值
【发布时间】:2014-04-28 15:23:10
【问题描述】:

!!!!已回答!!!!

我需要一点帮助来完成我的简单位操作程序。

  1. 向用户询问号码
  2. 打印数字的二进制表示
  3. 向用户询问位位置和位值
  4. 应用更改
  5. 以二进制形式显示用户所做的更改
  6. ??????再次将更改转换为数字。 ????????????

我只需要第 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();

【问题讨论】:

  • 这将对您有所帮助。 stackoverflow.com/questions/5283180/…
  • 不清楚你在问什么?请本地化问题,只问你想问的部分
  • 谢谢大家,我在这里提出问题后立即找到了解决方案,我试图完成一整天,这对我有用,我也会尝试 bansi 的建议 int[] array = 新的 int[1]; b.CopyTo(数组, 0); Console.WriteLine(array[0]);
  • 如果您有正确的答案,您应该考虑将其添加为答案,并将其标记为已接受的答案,而不是添加“已回答!!”在你的 OP...

标签: c# binary


【解决方案1】:

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();
}

【讨论】:

  • 谢谢大家,我会研究您的建议,以了解其背后的逻辑:)
【解决方案2】:

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

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));

【讨论】:

    【解决方案3】:

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

    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);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-18
      • 2018-06-01
      • 2017-07-15
      • 1970-01-01
      • 2014-04-21
      • 2018-10-20
      • 2019-01-23
      • 2010-10-03
      • 2011-07-15
      相关资源
      最近更新 更多