Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将整数转换为二进制的简单快速的方法?_C# - Fatal编程技术网

C# 将整数转换为二进制的简单快速的方法?

C# 将整数转换为二进制的简单快速的方法?,c#,C#,我要找的是类似于C#中的PHPsdecbin函数的东西。该函数将小数转换为字符串形式 例如,当使用decbin(21)时,它返回10101作为结果 我找到了基本上符合我要求的方法,但也许有更好/更快的方法 int toBase = 2; string binary = Convert.ToString(21, toBase); // "10101" –几乎是转换类的唯一用途(否则是无用的)Convert类。大多数方法都比您找到的函数更好更快。关于如何进行转换,这不是一个很好的例子 内置方法Co

我要找的是类似于C#中的PHPs
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');