如何将整数转换为二进制表示?

我正在使用下面的代码:

String input = "8";
String output = Convert.ToInt32(input, 2).ToString();

但是它抛出了一个异常:

找不到任何可解析的数字


当前回答

我知道这个答案看起来与这里的大多数答案相似,但我注意到它们几乎都没有使用for循环。这段代码可以工作,并且可以被认为是简单的,因为它不需要任何特殊的函数就可以工作,就像带参数的ToString()一样,而且也不太长。也许有些人更喜欢for-loop而不是while-loop,这可能适合他们。

public static string ByteConvert (int num)
{
    int[] p = new int[8];
    string pa = "";
    for (int ii = 0; ii<= 7;ii = ii +1)
    {
        p[7-ii] = num%2;
        num = num/2;
    }
    for (int ii = 0;ii <= 7; ii = ii + 1)
    {
        pa += p[ii].ToString();
    }
    return pa;
}

其他回答

转换。ToInt32(string, base)不会将基数转换为基数。它假设字符串包含一个以指定基数为底的有效数字,并转换为以10为基数。

所以你会得到一个错误,因为“8”不是一个以2为基数的有效数字。

String str = "1111";
String Ans = Convert.ToInt32(str, 2).ToString();

将显示15(1111以2为底= 15以10为底)

String str = "f000";
String Ans = Convert.ToInt32(str, 16).ToString();

将显示61440。

BCL提供转换。ToString(n, 2)是很好的,但如果你需要一个替代的实现比BCL提供的快几个节拍。

下面的自定义实现适用于所有整数(-ve和+ve)。 原始来源来自https://davidsekar.com/algorithms/csharp-program-to-convert-decimal-to-binary

static string ToBinary(int n)
{
    int j = 0;
    char[] output = new char[32];

    if (n == 0)
        output[j++] = '0';
    else
    {
        int checkBit = 1 << 30;
        bool skipInitialZeros = true;
        // Check the sign bit separately, as 1<<31 will cause
        // +ve integer overflow
        if ((n & int.MinValue) == int.MinValue)
        {
            output[j++] = '1';
            skipInitialZeros = false;
        }

        for (int i = 0; i < 31; i++, checkBit >>= 1)
        {
            if ((n & checkBit) == 0)
            {
                if (skipInitialZeros)
                    continue;
                else
                    output[j++] = '0';
            }
            else
            {
                skipInitialZeros = false;
                output[j++] = '1';
            }
        }
    }

    return new string(output, 0, j);
}

以上代码是我的实现。所以,我渴望听到任何反馈:)

8位的只有一行

Console.WriteLine(Convert.ToString(n, 2).PadLeft(8, '0'));

n在哪里

        static void Main(string[] args) 
        {
        Console.WriteLine("Enter number for converting to binary numerical system!");
        int num = Convert.ToInt32(Console.ReadLine());
        int[] arr = new int[16];

        //for positive integers
        if (num > 0)
        {

            for (int i = 0; i < 16; i++)
            {
                if (num > 0)
                {
                    if ((num % 2) == 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 0;
                    }
                    else if ((num % 2) != 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 1;
                    }
                }
            }
            for (int y = 0; y < 16; y++)
            {
                Console.Write(arr[y]);
            }
            Console.ReadLine();
        }

        //for negative integers
        else if (num < 0)
        {
            num = (num + 1) * -1;

            for (int i = 0; i < 16; i++)
            {
                if (num > 0)
                {
                    if ((num % 2) == 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 0;
                    }
                    else if ((num % 2) != 0)
                    {
                        num = num / 2;
                        arr[16 - (i + 1)] = 1;
                    }
                }
            }

            for (int y = 0; y < 16; y++)
            {
                if (arr[y] != 0)
                {
                    arr[y] = 0;
                }
                else
                {
                    arr[y] = 1;
                }
                Console.Write(arr[y]);
            }
            Console.ReadLine();
        }           
    }
    // I use this function
    public static string ToBinary(long number)
    {
        string digit = Convert.ToString(number % 2);
        if (number >= 2)
        {
            long remaining = number / 2;
            string remainingString = ToBinary(remaining);
            return remainingString + digit;
        }
        return digit;
     }