是否有一个C#函数将64位“无符号”值格式化为其等效二进制值?

要将数字格式化/显示为等效的二进制forms(在C#中),我总是简单地调用:

Convert.ToString(myNumber, 2); 

今天,我刚刚意识到我一直在调用的.ToString()重载不支持大于9223372036854775807的值。注意.ToString()重载的签名是: .ToString(long, int) 。 其中“long”是64位有符号值,最大值为9223372036854775807。

换句话说,使用C#,当我运行它时:

 Convert.ToString(9223372036854775808,2); 

我收到此exception消息并不奇怪(由于签名):

‘System.Convert.ToString(object,System.IFormatProvider)’的最佳重载方法匹配有一些无效参数 – 参数2:无法从’int’转换为’System.IFormatProvider’

我的问题:是否有.NET函数允许我们将大于9223372036854775807的值转换为等效的二进制格式?

您可以将其称为未签名或签名,但如果您按位查看它也是一样的!

所以,如果你这样做:

 Convert.ToString((long)myNumber,2); 

如果有Convert.ToString()的ulong实现,你会得到相同的位,这就是为什么没有…;)

因此, ((long)-1)((ulong)-1)在内存中看起来相同。

不幸的是,没有像Convert.ToString(ulong,int)这样的直接.NET等价物。 你必须自己制作,如下所示:

 public static string ConvertToBinary(ulong value){ if(value==0)return "0"; System.Text.StringBuilder b=new System.Text.StringBuilder(); while(value!=0){ b.Insert(0,((value&1)==1) ? '1' : '0'); value>>=1; } return b.ToString(); }