我无法弄清楚为什么我的二进制到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();
}
答案 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];
}
小心使用索引:您应该binaryNumber
与placeValues
完全相同 (这就是我的原因)添加了PadLeft
)。
编辑:在现实生活中,我们做转换就像
一样简单int denaryNumber = Convert.ToInt32(binaryNumber, 2);
答案 1 :(得分:0)
Convert.ToInt32(binaryNumber[index])
没有做你想要的。它为您提供字符的内部表示(ASCII值),而不是由其表示的数值。使用
(int)Char.GetNumericValue(binaryNumber[index])
代替。或者,您可以减去'0'
binaryNumber[index] - '0'