C# 将整数转换为二进制的简单快速的方法?
我要找的是类似于C#中的PHPsC# 将整数转换为二进制的简单快速的方法?,c#,C#,我要找的是类似于C#中的PHPsdecbin函数的东西。该函数将小数转换为字符串形式 例如,当使用decbin(21)时,它返回10101作为结果 我找到了基本上符合我要求的方法,但也许有更好/更快的方法 int toBase = 2; string binary = Convert.ToString(21, toBase); // "10101" –几乎是转换类的唯一用途(否则是无用的)Convert类。大多数方法都比您找到的函数更好更快。关于如何进行转换,这不是一个很好的例子 内置方法Co
decbin
函数的东西。该函数将小数转换为字符串形式
例如,当使用decbin(21)
时,它返回10101
作为结果
我找到了基本上符合我要求的方法,但也许有更好/更快的方法
int toBase = 2;
string binary = Convert.ToString(21, toBase); // "10101"
–几乎是转换类的唯一用途(否则是无用的)
Convert
类。大多数方法都比您找到的函数更好更快。关于如何进行转换,这不是一个很好的例子
内置方法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
我的答案是:
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而不是模和除法,因此我认为这是一种更快的方法。要使二进制值(至少)具有指定数量的数字,并用零填充:
string bin = Convert.ToString(1234, 2).PadLeft(16, '0');
Convert.ToString将转换为二进制字符串。左键加上0,最多可填充16位。谢谢,这也是一个很好的选择!我已经怀疑我找到的函数不是实现它的最佳方法。+1表示递归。虽然我真的不喜欢在那里使用
null
,而“
也同样有效。虽然您的示例是一个很好的例子,但请注意,这个特定函数可以更简单有效地实现为:string s=Convert.ToString(value,2);返回新字符串('0',len-s.Length)+s代码>(假设二进制数符合提供的长度)哇,还有另一种用法作为Convert,Convert.ToDateTime!!非常好。哈哈,当你进行反射和泛型类型转换时总是有用的,但是很有趣!
string bin = Convert.ToString(1234, 2).PadLeft(16, '0');