2011-08-08 33 views
13

要格式化/顯示號碼爲其等效二進制形式(在C#),我一直簡稱:是否有一個C#函數將64位「無符號」值格式化爲其等價的二進制值?

Convert.ToString(myNumber, 2); 

今天,我只是意識到,我一直在呼籲的的ToString()超載不支持大於9223372036854775807的值。請注意.ToString()重載的簽名是:.ToString(long, int)。其中,「長」是一個64位簽署值最大的出局在9223372036854775807

爲了把它的另一種方式,使用C#,當我運行此:

Convert.ToString(9223372036854775808,2); 

,這並不奇怪(由於簽名),我收到此異常消息:

關於「System.Convert.ToString(對象, System.IFormatProvider)」最好的重載的方法匹配具有一些無效參數 - 參數2:不能轉換˚F ROM「詮釋」到「System.IFormatProvider」

我的問題:是否有一個.NET函數,使我們能夠比數值大於9223372036854775807轉換爲等效的二進制格式?

+0

你的意思是什麼確切的格式? Big-endian base-2? –

+0

Little-endian base2會做。 – Jed

回答

24

你可以稱它爲無符號或有符號,但如果你按位查看,它也是一樣的!

所以,如果你這樣做:

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

,你會得到相同的位,你會如果有烏龍實施Convert.ToString()的,而這就是爲什麼有沒有...;)

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

2

不幸的是,沒有像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(); 
} 
相關問題