C# 如何将二进制转换为十进制

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1961599/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-06 22:12:54  来源:igfitidea点击:

How to convert binary to decimal

c#.net

提问by Gold

How can I convert a binary string, such as 1001101to Decimal? (77)

如何将二进制字符串转换为1001101十进制?(77)

采纳答案by SLaks

The Convert.ToInt32method has an overload that accepts a base parameter.

Convert.ToInt32方法具有接受基本参数重载

Convert.ToInt32("1001101", 2).ToString();

回答by John Duff

Take a look at this questions which is very similar but dealing with hex How to convert numbers between hexadecimal and decimal in C#?

看看这个非常相似但处理十六进制的问题How to convert numbers between hexadecimal and decimal in C#?

Convert.ToInt64(value, 2)

回答by Mohit

string s=Console.ReadLine();

int b=Convert.ToInt32(s,2);

Console.WriteLine("Input value in base 10 = "+b);

convert any binary to decimal. :)

将任何二进制转换为十进制。:)

回答by euan jones

If you're after a manual way instead of using built in C# libraries, this would work:

如果您使用手动方式而不是使用内置的 C# 库,这将起作用:

static int BinaryToDec(string input)
{
    char[] array = input.ToCharArray();
    // Reverse since 16-8-4-2-1 not 1-2-4-8-16. 
    Array.Reverse(array);
    /*
     * [0] = 1
     * [1] = 2
     * [2] = 4
     * etc
     */
    int sum = 0; 

    for(int i = 0; i < array.Length; i++)
    {
        if (array[i] == '1')
        {
            // Method uses raising 2 to the power of the index. 
            if (i == 0)
            {
                sum += 1;
            }
            else
            {
                sum += (int)Math.Pow(2, i);
            }
        }

    }

    return sum;
}

回答by NewbCsharpCoder

I wanted a solution that always gave 32 bits no matter how big or small the number. So this is what I created.

我想要一个解决方案,无论数字有多大或多小,它总是给出 32 位。所以这就是我创造的。

public static string ConvertUintToBitString(uint Number)
{
    string _BitString = string.Empty;

    if (Number >= 2147483648)
    {
        _BitString += '1';
        Number = Number - 2147483648;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 1073741824)
    {
        _BitString += '1';
        Number = Number - 1073741824;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 536870912)
    {
        _BitString += '1';
        Number = Number - 536870912;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 268435456)
    {
        _BitString += '1';
        Number = Number - 268435456;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 134217728)
    {
        _BitString += '1';
        Number = Number - 134217728;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 67108864)
    {
        _BitString += '1';
        Number = Number - 67108864;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 33554432)
    {
        _BitString += '1';
        Number = Number - 33554432;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 16777216)
    {
        _BitString += '1';
        Number = Number - 16777216;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 8388608)
    {
        _BitString += '1';
        Number = Number - 8388608;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 4194304)
    {
        _BitString += '1';
        Number = Number - 4194304;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 2097152)
    {
        _BitString += '1';
        Number = Number - 2097152;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 1048576)
    {
        _BitString += '1';
        Number = Number - 1048576;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 524288)
    {
        _BitString += '1';
        Number = Number - 524288;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 262144)
    {
        _BitString += '1';
        Number = Number - 262144;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 131072)
    {
        _BitString += '1';
        Number = Number - 131072;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 65536)
    {
        _BitString += '1';
        Number = Number - 65536;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 32768)
    {
        _BitString += '1';
        Number = Number - 32768;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 16384)
    {
        _BitString += '1';
        Number = Number - 16384;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 8192)
    {
        _BitString += '1';
        Number = Number - 8192;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 4096)
    {
        _BitString += '1';
        Number = Number - 4096;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 2048)
    {
        _BitString += '1';
        Number = Number - 2048;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 1024)
    {
        _BitString += '1';
        Number = Number - 1024;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 512)
    {
        _BitString += '1';
        Number = Number - 512;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 256)
    {
        _BitString += '1';
        Number = Number - 256;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 128)
    {
        _BitString += '1';
        Number = Number - 128;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 64)
    {
        _BitString += '1';
        Number = Number - 64;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 32)
    {
        _BitString += '1';
        Number = Number - 32;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 16)
    {
        _BitString += '1';
        Number = Number - 16;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 8)
    {
        _BitString += '1';
        Number = Number - 8;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 4)
    {
        _BitString += '1';
        Number = Number - 4;
    }
    else
    {
        _BitString += '0';
    }
    if (Number >= 2)
    {
        _BitString += '1';
        Number = Number - 2;
    }
    else
    {
        _BitString += '0';
    }
    if (Number == 1)
    {
        _BitString += '1';
    }
    else
    {
        _BitString += '0';
    }

    return _BitString;
}

回答by Berkay E?er



I have tried this after reading your problem. It is a bit longer but it provides a solution. I saved binary elements in an array to get a solution. Like I said It is a bit longer, much shorter ways can be found.

阅读您的问题后,我已尝试过此操作。它有点长,但它提供了一个解决方案。我将二进制元素保存在数组中以获得解决方案。就像我说的它有点长,可以找到更短的方法。

        // Binary ------> Decimal 
        int len;
        double deci = 0;

        Console.Write("Length of binary number: ");
        len = Convert.ToInt32(Console.ReadLine());

        int[] bnry = new int[len];

        for (int i = 0; i < len; i++)
        {
            Console.Write("{0} index of binary number: ", i);
            bnry[i] = Convert.ToInt32(Console.ReadLine());
        }
        Console.Write("Your binary number: ");
        for (int i = len - 1; 0 <= i; i--)
        {

            Console.Write(bnry[i]);

        }

        Console.Write("\nDecimal number: ");
        for (int i = 0; i < len; i++)
        {
            deci += (bnry[i] * Math.Pow(2, i));
        }
        Console.Write(deci);