将int转换为二进制的简单快捷方法?

时间:2009-12-03 10:13:39

标签: c#

我正在寻找的是像C#中的PHP decbin函数。该函数将小数转换为字符串表示形式。

例如,使用decbin(21)时,会返回10101作为结果。

我发现this function基本上可以做我想要的,但也许有更好/更快的方式?

5 个答案:

答案 0 :(得分:158)

var result = Convert.ToString(number, 2);

- 几乎是(无用的)Convert类的唯一用途。

答案 1 :(得分:31)

大多数方式会比您找到的功能更好更快。这不是一个关于如何进行转换的非常好的例子。

内置方法Convert.ToString(num, base)是一个显而易见的选择,但如果您需要以不同的方式工作,则可以轻松编写替换。

这是一种简单的方法,您可以在其中指定二进制数的长度:

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

它使用递归,第一部分(在+之前)调用自身来创建除最后一个数字之外的数字的二进制表示,第二部分处理最后一个数字。

示例:

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

输出:

00101010

答案 2 :(得分:9)

int toBase = 2;
string binary = Convert.ToString(21, toBase); // "10101"

答案 3 :(得分:3)

要使二进制值(至少)指定的位数,用零填充:

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

Convert.ToString转换为二进制字符串 PadLeft添加零填充最多16位数。

答案 4 :(得分:0)

这是我的答案:

    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;
    }

使用Pow而不是模数和除法,所以我认为它的速度更快。