2011-08-08 15 views
13

Eşdeğer ikili formuna (C#) bir sayıyı biçimlendirmek/görüntülemek için, her zaman basitçe aradım:64bit "Unsigned" değerini eşdeğer binary değerine biçen bir C# işlevi var mı?

Convert.ToString(myNumber, 2); 

Bugün, aradığım .ToString() aşırı yüklenmesinin desteklemediğini fark ettim 9223372036854775807'den büyük değerler. .ToString() aşırı yükünün imzası şu şekildedir: .ToString(long, int). "Long", 642 imzalı bir değeri olan 9223372036854775807'de

olduğunda, C# kullanarak başka bir şekilde söylemek gerekirse:

Convert.ToString(9223372036854775808,2); 

Bu bir sürpriz (imzası nedeniyle)) Bu özel durum iletisini aldığım:

'System.Convert.ToString (nesne, System.FormatProvider)' için geçersiz olan en iyi yöntem eşleştirmesi bazı geçersiz argümanlara sahiptir - Argument 2: 'int' dönüşemez 'System.IFormatProvider'

Soruma: 9223372036854775807'den daha büyük değerleri kendi ikili dosyalarına dönüştürmemize izin veren bir .NET işlevi var mı?

+0

Tam biçim nedir? Büyük endian üssü-2? –

+0

Küçük endian üssü 2 yapacak. – Jed

cevap

24

İmzasız veya imzalı olarak da adlandırılabilir, ancak bitine bakarsanız aynıdır!

yapmanız Yani eğer bu:

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

Eğer Convert.ToString() uygulanmasını Ulong orada olsaydı gibi aynı parçaları almak ve şu orada yok olmasının nedeni ... olur;)

Bu nedenle, ((long)-1) ve ((ulong)-1) bellekte aynı görünüyor.

2

Ne yazık ki Convert.ToString (ulong, int) gibi doğrudan .NET eşdeğeri yoktur. Aşağıdaki gibi kendi kendiniz yapmak zorundasınız:

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(); 
} 
İlgili konular