二进制到否定转换

时间:2018-05-03 08:31:04

标签: c# binary

我无法弄清楚为什么我的二进制到denary数字转换器不起作用。我需要一个简单的解决方案来向GCSE计算机科学专业的学生展示。请帮忙:

static void Main(string[] args)
{
    string binaryNumber;
    int[] placeValues = { 128, 64, 32, 16, 8, 4, 2, 1 }; 
    // Array stores place values of the digits
    int denaryNumber = 0;

    Console.WriteLine("Please enter an 8-bit binary number: ");
    binaryNumber = Console.ReadLine();

    // The digits will now be multiplied by the place values
    for (int index = 0; index < binaryNumber.Length; index++)
    {
        denaryNumber = denaryNumber + 
        (Convert.ToInt32(binaryNumber[index]) * placeValues[index]);
    }
    Console.WriteLine("\n" + binaryNumber + " = " + denaryNumber);
    Console.ReadKey();
}

2 个答案:

答案 0 :(得分:0)

使用字符串

 "011001"

你应该减去'0'得到整数数字:1 == '1' - '0',而Convert.ToInt32('1') != 1,即

binaryNumber = Console
  .ReadLine()
  .Trim()                            // Let's be nice and remove (white) spaces 
  .PadLeft(placeValues.Length, '0'); // What if "011" is the input?

for (int index = 0; index < binaryNumber.Length; index++)
{
    denaryNumber += (binaryNumber[index] - '0') * placeValues[index];
}

小心使用索引:您应该binaryNumberplaceValues完全相同 (这就是我的原因)添加了PadLeft)。

编辑:在现实生活中,我们做转换就像

一样简单
int denaryNumber = Convert.ToInt32(binaryNumber, 2);

答案 1 :(得分:0)

Convert.ToInt32(binaryNumber[index])

没有做你想要的。它为您提供字符的内部表示(ASCII值),而不是由其表示的数值。使用

(int)Char.GetNumericValue(binaryNumber[index])

代替。或者,您可以减去'0'

binaryNumber[index] - '0'