Sayfalar

5 Aralık 2008 Cuma

.Net 3.5 LINQ - Sayıyı 16'lık sistemden 2'lik sisteme çevirme

static void Main()
{
string bNumber = HexToBin("15C784");
}

public static string HexToBin(string str)
{
return String.Join("", (from chr in str.ToCharArray()
select Convert.ToString(Convert.ToInt32(chr.ToString(), 16), 2).PadLeft(4, '0')).ToArray());
}

Kodun İşleyişi

HexToBin method'u kendisine parametre olarak gönderilen 15C784 değerini 2'lik sisteme çevirerek 000101011100011110000100 değerini döndürür. Böylece bNumber değişkeninin değeri 000101011100011110000100 oluyor.

Bu işlemler nasıl gerçekleşiyor?

Öncelikle HexToBin methoduna parmetre olarak gönderilen 15C784 değeri char array'e dönüştürülüyor. Ve dizi değişkenleri döngü içerisine alınıyor.
Kod satırı: from chr in str.ToCharArray() select

Şimdi döngünün ilk adımında olduğumuzu düşünelim char array'in ilk değeri 1 olacaktır.

Convert.ToInt32(chr.ToString(), 16) //1 değerini 16 sisteme çevriliyor.

Convert.ToString(Convert.ToInt32(chr.ToString(), 16), 2) //16 lık sisteme çevrildikten sonra 2 lik sisteme çevriliyor.

PadLeft(4, '0') //eğer oluşan string 4 uzunluğundan küçük ise sol tarafına '0' ekliyor.

Convert.ToString(Convert.ToInt32(chr.ToString(), 16), 2).PadLeft(4, '0')).ToArray() //ve elde edilen string tipindeki veri array'a dönüştürülerek String.Join ile birleştiriliyor.

String.Join(string separator, string[] value) kendisine ilk parametre olarak verilen separator(ayırıcı) ile ikinci parametre olarak verilen array'i birleştirir.
Örneğin String.Join e separator olarak "," vermiş olsaydık dönen değer 0001,0101,1100,0111,1000,0100 şeklinde olacaktı.

Hiç yorum yok:

Yorum Gönder

Yorumunuzu bırakın.