简单而快速的方法来将int转换为二进制?
我正在寻找的是像C#中的PHP decbin
函数。 该函数将小数转换为其表示forms的string。
例如,当使用decbin(21)
,返回10101
。
我发现这个function基本上是我想要的,但也许有一个更好/更快的方式?
var result = Convert.ToString(number, 2);
– 几乎是(否则无用) Convert
类的唯一用法。
大多数方法会比你find的function更好更快。 这不是一个很好的例子,如何做转换。
内置方法Convert.ToString(num, base)
是一个明显的select,但是如果需要以不同的方式工作,则可以轻松地编写replace。
这是一个简单的方法,您可以指定二进制数的长度:
public static string ToBin(int value, int len) { return (len > 1 ? ToBin(value >> 1, len - 1) : null) + "01"[value & 1]; }
它使用recursion,第一部分(在+之前)调用自己创build数字的二进制表示,除了最后一位数字,第二部分照顾最后一位数字。
例:
Console.WriteLine(ToBin(42, 8));
输出:
00101010
int toBase = 2; string binary = Convert.ToString(21, toBase); // "10101"
要在(至less)指定的位数中得到二进制值,用零填充:
string bin = Convert.ToString(1234, 2).PadLeft(16, '0');
Convert.ToString将转换为二进制string。
PadLeft将零填充到16位数字。
这是我的答案:
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而不是模和分,所以我认为这是更快的方法。