easy and fast way to convert an int to binary?

后端 未结 5 1940
[愿得一人]
[愿得一人] 2020-12-01 02:46

What I am looking for is something like PHPs decbin function in C#. That function converts decimals to its representation as a string.

For example, when

相关标签:
5条回答
  • 2020-12-01 03:13

    To have the binary value in (at least) a specified number of digits, padded with zeroes:

    string bin = Convert.ToString(1234, 2).PadLeft(16, '0');
    

    The Convert.ToString does the conversion to a binary string.
    The PadLeft adds zeroes to fill it up to 16 digits.

    0 讨论(0)
  • 2020-12-01 03:20
    var result = Convert.ToString(number, 2);
    

    – Almost the only use for the (otherwise useless) Convert class.

    0 讨论(0)
  • 2020-12-01 03:21

    This is my answer:

        static bool[] Dec2Bin(int value)
        {
            if (value == 0) return new[] { false };
            var n = (int)(Math.Log(value) / Math.Log(2));
            var a = new bool[n + 1];
            for (var i = n; i >= 0; i--)
            {
                n = (int)Math.Pow(2, i);
                if (n > value) continue;
                a[i] = true;
                value -= n;
            }
            Array.Reverse(a);
            return a;
        }
    

    Using Pow instead of modulo and divide so i think it's faster way.

    0 讨论(0)
  • 2020-12-01 03:25

    Most ways will be better and faster than the function that you found. It's not a very good example on how to do the conversion.

    The built in method Convert.ToString(num, base) is an obvious choice, but you can easily write a replacement if you need it to work differently.

    This is a simple method where you can specify the length of the binary number:

    public static string ToBin(int value, int len) {
       return (len > 1 ? ToBin(value >> 1, len - 1) : null) + "01"[value & 1];
    }
    

    It uses recursion, the first part (before the +) calls itself to create the binary representation of the number except for the last digit, and the second part takes care of the last digit.

    Example:

    Console.WriteLine(ToBin(42, 8));
    

    Output:

    00101010
    
    0 讨论(0)
  • 2020-12-01 03:28
    int toBase = 2;
    string binary = Convert.ToString(21, toBase); // "10101"
    
    0 讨论(0)
提交回复
热议问题