Respond needs javascript to run. To find out more click here
2009 Temmuz » Sayfa 11 » Serdar Demir
RSS
 

Archive for Temmuz, 2009

Google nasıl buluyor; sistem nasıl çalışıyor?

23 Tem

Google küçük bir anahtar kelime yardımıyla ilgili sonuçları nasıl buluyor; diğerlerinden farkı ne?

Google gibi arama motorları nasıl oluyor da aradığımız bilgiyi birsaniyeden kısa bir sürede karşımıza getiriyor? Nasıl çalışıyor hiçmerak ettiniz mi?

Arama motorlarının hızlı ve doğru arama sonuçları sunmak için yaptığıüç işlem var. Devamlı interneti tarayarak sayfaları bulmak,okumak ve endeksleyerek arama geldiğinden içinden uygunsonuçları sıraya dizip kullanıcının karşısına getirmek. Üçten fazla mı oldu? Hayır, temelde aramakıyaslama ve sıralama üçlüsü var, diğerleri ara islemler.

spiderSpidering” denilen tabir, ağ ve örümcek ilişkisi gibi arama motorununyuvası olan ağı dolaşıp nerede ne var bilmesi anlamına geliyor. Kısaca interneti taramak diyebiliriz.

Bu işi yapan,internetsitelerini okuyarakkaynak kodu analiz eden vebağlantıları takip eden algoritmalaroldukça özel. Bu sayfaları kaydedip daha sonra detaylı bir şekildeanaliz ediyorlar. İnternette bu “Web crawler“, “web robot” veya “bot” da denilen programları yazmanın yolu yordamı da var. Ancak işinincelikleri, arama motorlarının kullandığı başarılı sürümlerin sırları saklı.

Hızlı açılış, hızlı endeksleme...Bir bot internetteki bağlantıları takip ederken diyelim ki bir resme denk geldi. Resmi sitede görmek için farklı boyut seçenekleri var. Bu bot’ungezmesi gereken adres sayısınıartırıyor. Birden fazla resim dizilimi, küçük resim boyutu, dosya formatıseçeneği derken bunlarınvaryasyonları sayı olarakkatlanarak büyüyor. İnternetin dev gibi, devamlı büyüyen bir yer olduğu düşünülürse, programların bile devamlı dolaşıp içerik hakkındagüncel bilgi edinmesinin ne kadar zor olduğu anlaşılır. Google yılmadan donanıma ve yazılıma yatırım yaparak interneti tarama kapasitesini devamlı arttırıyor.

Google rakiplerini hem bu alanda aştı, hem de hepsinden hızlı endeksleme sayesinde hizli ve doğru sonuçlar sundu. Zaten Google tasarımındaki basitlikten de kazanıyor. Çok hızlı açılan bir sayfa. Sonuçları hızlı olduğu kadar tutarlı çünkü sıralama algoritması çok iyi çalışıyor. İyi çalışmanın ötesinde rakiplerinden farklı ama bu farka daha sonra değineceğiz.

Klasik arama motorları kopyaladıkları nternet sayfalarındaki sözcüklerin bir listesini ve her kelimenin kullanıldığı sayıyı not alarak bir önem tablosu çıkartıyor. Bu sayede program arama sonuçlarındaaranan kelimelerden en çok bahseden sonuçları üst sıraya çıkartıyor. Tabii ki bunu böyle ifade edince çok kolay görünüyor. Ama sorunkullanılan her dilde kelimelerin ekli, çekimli hallerinin bulunması. Eklerve noktalama işaretleri, internet adresleri derken kelimelerin ufak tefek farklı yazılışları onların ayrı kelimeler olarak algılanmasına sebep oluyor. Bunu düzeltmek için kural üzerine kural yazılıyor ve daha mantıklı sonuçlar ortaya konuyor.

Bu yöntemin esas sorunu, yöntemin farkında olan sitelerin kendilerine daha fazla ziyaretçi çekmek için hile yaparak siteleri çok aranan kelimelerle dolduruyor olması. Ancak işte bu Google’a sökmüyor.

Listelenen kelimelerin karşılarınasayılar diziliyor. Endeksteki bu sayılar ise doküman numarası oluyor.Kelime anahtar, o anahtarla aranan karşısındaki dokümanlar oluyor. Her dokümandaki kelimelerin listesinden, kullanım ağırlıklarından bu duruma geldik. Artık liste tersine döndü ve kelimelerin kullanim ağırlığı sıralamaya yansıdı.

Google ve gittikçe basitleşen listelerŞimdi elde dev bir kelime listesi var, aranan kelimelere buradanbakılıyor ve karşılık gelen doküman numaraları alınarak doküman isimleri, adresleriyle onlara atanmış sayıların olduğu diğer tablodanalınarak arama sonucu olarak kullanıcının karşısına adresler getiriliyor. Kelimelerin karşısına gelen veriler direk doküman numarasi olduğu için de bu ana endeks sıkıştırılabiliyor.

Sıkıştırma yöntemi olarak da sayıları depolamak yerine dev birBitmap hazırlanıyor. Sayıları yazmak yerine satır ve sütun numarası kelimeyi ve karşılığı olan sayıyı belirtecek yer dolduruluyor veya boşbırakılıyor. Bu sayede büyük miktarda yer kazanılmış oluyor. Çünkü tablodaki çoğu kelimenin karşısında çok fazla doküman yok. Örneğintrilyon sayfayı endeksleyen bir arama motorunda böyle bir resim 130 GB kadar yer tutuyor. Sıkıştırıldığında ise daha az tutuyor ve az evvel söylediğimiz gibi çoğunluğu boş olduğundan sıkıştırılmaya çok müsait.

Bitmap'in sağladığı müthiş kolaylıklarDahası bu sıkıştırma metodu birden çok kelime arandığında da kolaylıksağlıyor. Bitmap üzerinde satır ve sütunlarda bu aranan iki veya daha çokkelime ve yer aldıkları belgelerkolaylıkla bulunup aktarılabiliyor. Ortaya sadece aranan sonuçları içeren yeni bir Bitmap çıkıyor.

Google gibi dev bir arama motorunda bitmapler birden çok sunucuya yayılabiliyor. Bunların çok daha fazla sayıda da kopyası tutuluyor. Yine de bu yöntem arama süresini inanılmaz kısaltıyor. Bir kullanıcının evindeki PDFOffice ve e-postadosyaları için de bu “inverted file” endeksleme metodu kullanıldığında arama süreleri yine çok kısalıyor. Google Desktop da zaten masaüstü için bunu yapıyor.

İnternette yapılan aramalarla ilgili önemli bir nokta da kullanıcıların genellikle sadece ilk sayfadaki sonuçlara bakması. İlk arama sonuçlarına göre kullanıcı aradığına yakın bir sonucu hemen karşısında görmezse aradığı kelimeleri gözlemlerine göre değiştirerek tekrar deniyor. Sabırlı kullanıcılar bile arama sonuçlarının en fazla ilk birkaçsayfasını inceliyor.

Ve esas fark bu kelimede gizli: PageRank

Ve esas fark bu kelimede gizli: PageRank

Gelelim Google’ın farkına, Sergey Brin ve Larry Page, Stanford Üniversitesi’ndeyken akademik bir makale yayınlarlar. Türkçe olarak adı “Büyük Ölçekli bir Hipermetin Ağ Arama Motorunun Anatomisi“dir. Burada yeni arama motorlarının prototipiniçizmişlerdir.

Arama motorunun ismi Google‘dır. Bu Googol‘un yanlış okunuşudur. Googol ise 10′un yüzüncü kuvveti demek oluyor. İsmin gizemini de böylede aydınlatmış olduk. Brin ve Page arama sonuçlarını daha iyihale getirmek için PageRank isimli bir algoritma kullanmaya karar verirler. Bu Larry Page’in ismini taşımaktadır.

PageRank sayfalarını anahtar sözcüklerle doldurarak üst sıralara çıkmak isteyen siteleri çok şaşırtmıştı. Google bu algoritma sayesinde gerekten işe yarar sonuçları büyük bir tutarlılıkla kullanıcıların karşısına getiriyordu. Aslında hala da getiriyor. Peki bu PageRank’ınsırrı nedir?

PageRank sitelerin bağlantılarını inceleyerek önem sırasına dizen bir sistem. Çok fazla bağlantı alan, kaynak olarak gösterilen bir sitenin PageRank’ı haliyle yüksek oluyor. O site bir kaynak olarak üst sıralara taşınıyor. Önemli siteler de başka sitelere bağlantı verdiklerinde onları daha önemli hale getiriyorlar. Sonuç itibariyleiçeriğinden en çok yararlanılan siteler üst sıraları kapıyor. Kullanıcılar da aradıklarını rahatlıkla ve esas kaynağından bulabiliyorlar. Her zaman kusursuz çalışmasa da şimdiye kadar geliştirilmiş en etkiliyöntem bu.

Bunu biraz daha anlatmak gerekirse bir sayfaya atanan PageRankaslında sadece önem sırası değil.Google 10, Wikipedia 9; CHIP Online... Belli sayfaları gezen bir kullanıcının, bir sonraki adımında o sayfayı ziyaret etme ihtimali de işin içinde. Bu alakabağları ortaya gerçekçi sonuçlar koyuyor.

Google’ın ticari sırrı olan bir formül PageRank’ı 0 ila 10 arasında belirliyor. PageRank’ı 0 olanlar henüz pek kaynak gösterilmemiş yeni siteler. 10 olan ise şimdilik sadece Google var. WikipediaTwitter ve Yahoo!gibi bilgi kaynakları PageRank 9′a sahipler. Facebook 8′de kalıyor. Sonuçta önem ve kalite sırası sayesinde kullanıcılar ihtiyaçlarına kolayca ulaşabiliyor. Şu anda okumakta olduğunuz CHIP Online ise PageRank 7‘ye sahip yani internetteki önemliüst düzey siteler arasında yer alıyor.

Nicelik yerine niteliğe önem veren bir sistem olan PageRank, sayfaların önem ve yaygınlık ağırlığını ölçerek çalışıyor. İşte bu sayedeGoogle başarılı oluyor, bugün bu buluş sayesinde Microsoft‘a rakip oluyor. Arama motoru olarak yüzde 65′lik dilimi elinde bulunduran Google elbette sadece bu algoritmayla işi götürmüyor. Google’ınsunucu çiftlikleri, bu işe ayırdığı para ve zaman da inanılmaz ölçülerde. Bu sayede çok daha iyi bir algoritma geliştirilmedikçe, yeni bir arama motorunun arkasında Microsoft gibi bir sermaye ve güçolmadıkça Google’a rakip olması çok zor. Sihirli formül şimdilik çok iyi çalışıyor ve artık siz de nasıl çalıştığını biliyorsunuz.

PageRank teorisinin şeması
 

C# ile Windows Registry Islemleri(Microsoft.Win32)

22 Tem

C# ile Windows Registry Islemleri(Microsoft.Win32)

Registry’ye yazma ve okuma işlemlerinin nasil yapilir ?
Hemen hemen her profesyonel uygulamada gördügümüz Registry’ye yazma ve ordan okuma islemlerinin nasil yapildigini basit bir uygulama ile anlatacagiz. Düsününki bir uygulama gelistirdik ve uygulama her çalistiginda kullaniciyi selamlamak istiyoruz ve uygulamayi kaçinci defa çalistirdigini söylemek istiyoruz ona. Bunun bir çok yolu olmasina ragmen en güzel ve en güvenilir yolu ilgili bilgileri Windows un registry dedigimiz bölgesinde tutmaktir. registry dedigimiz yerler olmasaydi pek ala bu isi dosyaya yazma ve okumayla da yapabilirdik. Regsitery bölgesini okuma ve yazma amaçli .NET framework sinif kütüphanalerinden faydalanacagiz. Bu siniflar Microsft.Win32 isimalaninin altinda bulunmaktadir. Bu siniflarin en çok kullanilan metodlarini ve özelliklerini anlatmaya baslamadan önce programizin yapisini kisaca anlatayim.
Bir console uygulamasi olusturacagiz. Program ilk çalistiginda bize bundan sonraki açilislarinda bizi selamlamasi için adimizi soracak.Daha sonra programi çalistirdigimizda “Hosgeldin Sefer

. Programi 3. defa çalistiriyorsunuz.” diyecek. Programin kaç defa çalistigini anlamak için ise program ilk açildiginda registry bölgesine “1″ degerini yazacagiz ve programin her çalistiginda o degeri bir artiracagiz. Böylece programin kaç defa çalistigini ögrenmis olacagiz. Tabi eger Windows un <regedit> araciyla daha önceden ugrastiysaniz bizim programlama yoluyla degistirdigimiz degerleri kendi ellerinizle gidip degistirebilirsiniz. Demek istedigim burda sifre ve kullanici adi gibi bazi kisiye özel bilgilerin saklanmasi pek güvenli degildir.

Eger su ana kadar registry hakkinda bir bilginiz yoksa Start->Run ‘ menusune gelip regedit yazarak registry hakkinda biraz bilgi edinebilirsiniz. Bu programla rastgele degerler silerseniz bazi programlariniz zarar görebilecegi için tavsiyem her hangi bir silme islemi yapmayan ve sadece neler olup
bittigine bakin.

Simdi C# in büyük bir kolaylik sagladigi registry yazma ve okuma için gelistirilmis RegistryKey sinifinin islevlerini görelim.
:::: RegistryKey Sinifi(Microsoft.Win32) ::::.

Bildiginiz gibi windowsun register yapisi agaç seklindeki klasörlere benzer. Her yeni anahtar altinda bir alt anahtar açabildigimiz gibi anahtarlar altinda yeni “string” yada “int” gibi degerler olusturup programla ilgili istedigimiz degerleri saklayabiliriz. Bu ise klasörlerde olusturdugumuz dosyalara benzer. Daha öncede dedigimiz gibi buraya regedit le kolayca ulasabildigimiz için güvenlik amaçli bilgileri (sifre vs) veya programimizla ilgili kritik bilgileri(serial number vs) burada saklamamamiz gerekir. Biz bu programdaki bilgilerimizi HKEY_LOCAL_MACHINE\Software altinda csnedir isimli bir alt anahtar olusturarak kaydedecegiz.

RegisteryKey sinifi türünden bir nesne olusturmak için ya RegiteryKey sinifinin static üye fonksiyonu olan OpenSubKey() metodunu yada yada Register sinifinin static üyelerini kullaniriz. Asgida detayli olarak bu metodlar hakkinda bilgi bulabilirsiniz.

:: CreateSubKey() Metodu ::

Geriye RegistryKey türünden bir nesne dödüren bu fonksiyon yeni bir alt anahtar olusturur yada var olan bir anahtari okumak için açar.Fonksiyonun prototipi asagidaki gibidir. Unutmayin bu metodu kullanabilmek için ilgili kullanicinin register bölgesine erisim hakkinin olmasi gerekir. Aksi halde SecurityException hatasi olusur.

public RegistryKey CreateSubKey(string subkey);

:: OpenSubKey() Metodu ::

Bu metod iki sekilde kullanilabilir, overload edilmis iki metod asagidaki gibidir.

public RegistryKey OpenSubKey(string);//Bu metod anahtar okumak amciyla kullanilir ve geriye RegisteryKey döndürür.

public RegistryKey OpenSubKey(string,bool);//Bu metod ilk metod ile aynidir fakat eger açilacak anahtara yazmada yapacaksak ikinci parametreyi true olarak girmemiz gerekir. Varsayalin olarak ReadOnly açilir.

:: DeleteSubKey() Metodu ::

Bu metod iki sekilde kullanilabilir, overload edilmis iki metod asagidaki gibidir.

public void DeletSubKey(string);//Parametre olarak gönderilen alt anahtari siler.

public void DeletSubKey(string,bool);//Parametre olarak gönderilen alt anahtari siler.Ikinci parametre ise belirtilen alt anahtarin olmamasi durumunda “ArgumentNullException” hatasinin yakalnip yakalanmayacagini gösterir.Eger true ise bu hata yakalanir, false ise herhangi birsey olmaz.

:: DeleteSubKeyTree() Metodu ::

Bu metod iki belirtilen anahtardaki bütün anahtarlari siler.Bir dosyayi sildiginide içindeki tüm dosyalari sildiginiz gibi.Prototipi asagidaki gibidir.
public void DeletSubKeyTree(string);

:: DeleteValue() Metodu ::

Iki sekilde kullanilabilir.Parametre olarak belirtilen degeri anahtardan siler.Ikinci parametre ise DeleteSubKey() metodunda oldugu gibi hata yakalanip yakalanmayacagini belirtir.

:: Flush() Metodu ::

Registry ‘de yaptigimiz degisiklikleri diske kaydetmek için bu metodun çagrilmasi gerekir.

:: GetSubKeyNames() Metodu ::

Be metod geriye döndürdügü string dizisine ilgili anahtardaki alt anahtar isimlerini doldurur.Prototipi asagidaki gibidir.

public string[] GetSubKeyNames()

:: GetValue() Metodu ::

Ilgili anahtardaki degerin içerigini object türü olarak geri dönderir.Iki sekilde kullanilabilir. Parametrik yapisi asagidaki gibidir.

public object GetValue(string)
public object GetValue(string,object) //eger deger yoksa varsayilan olarak parametre olarak verilen object geriye döner.

:: GetValueNames() Metodu ::

Ilgili anahtardaki bütün degerleri bir string dizine aktarir.Parametrik yapisi asagidaki gibidir

public string[] GetValueNames()

:: SetValue() Metodu ::

Birinci parametresi ile belirtilen anahtara ikinci parametresi ile belirtilen bilgi aktarilir.Parametrik yapisi asagidaki gibidir.

public void SetValue(string,object)

:: Name Özelligi ::

Taban anahtardan itibaren(mesela HKEY_LOCAL_MACHINE) ilgili anahtarin tam yolunu verir.

:: ValueCount Özelligi ::

Anahtarda bulunan degerlerin sayisini verir.

RegistryKey sinifinin üye elmanlari ve olusturdugu exception siniflari ile ilgili detayli bilgiyi MSDN Online’ dan yada .NET Framework SDK Documentation ‘ dan edinebilirsiniz.

Simdi yazimizin basinda bahsettigimiz örnek uygulamamiza göz atalim.
//registry.cs

using System;
using System.Win32
//RegistryKey sinifini kaynakkodda direkt kullanabilmek için bu isimalanini ekledik.

class CsReg
{
public static void Main()
{
RegistryKey register;
register = Registry.LocalMachine.OpenSubKey(@”Software\csnedir”,true);
//HKEY_LOCAL_MACHINE/Software/csnedir anahtarini olusturup anahtara yazma modunda açiyoruz.
if (register.GetValue(“ad”) == null)
{
/*Bu if blogunda programin ilk defa çalismasi durumu ile ilgili islemler yapiliyor.Programin ilk defa çalistigini register.GetValue(“ad”) ==null ifadesi ile anliyoruz. Kullanicidan isim alinip registry de “ad” isimli anahtara yaziliyor ve tabili “Oturum” adinida programi bir defa çalistirdigini belirten 1 degeri yaziliyor*/
Console.WriteLine(“Lütfen adinizi yaziniz”);
string ad = Console.ReadLine();
register.SetValue(“ad”,(string)ad);
register.SetValue(“oturum”,1);
Console.WriteLine(“Tesekkürler…”);
}
else
{
/*Bu blokta ise programin sonraki çalismalari ile ilgili islemler yapiliyor. Oturum sayisi registry den okunup aritmetik isem yapabilmek için ilgili formata dönüstürüdükten sonra tekrar yeni degeri ile registry ye yaziliyor.Ayni sekilde registry den “ad” degeri alinarak kullanici selamlaniyor.*/
string ad = (string)register.GetValue(“ad”);

int oturum_sayisi=Convert.ToInt32(register.GetValue(“oturum”))+ 1;
register.SetValue(“oturum”,oturum_sayisi);
Console.WriteLine(“Hosgeldin ” + ad);
Console.WriteLine(“Programi ” + oturum_sayisi + ” kez açtiniz”);
Registry.LocalMachine.Flush();
}
}
}

not: Alıntıdır


 
2 Comments

Posted in C#

 

C# da sıkıştırma algoritmaları örnek uygulama anlatım

22 Tem

Sıkıştırma algoritmaları

Winrar-SZ-128x128Bildiğimiz gibi bilgisayarda veriler 1 byte yani 8 bitten oluşur yani karakterler 010101111 şeklinde 2 lik sistemde sayılarla temsil edilir. Bilgisayarlarda ihtiyaç duyulan veya saklanan verilerin her geçen gün arttıgı biliniyor bu yogunluğu azaltmak üzere ve daha az kayıplı sıkıştırma yapabilmek için birçok sıkıştırma programları üretilmiştir hepimiz bunları kullanıyoruz kullanmak zorundayız. Winar winzip en popüler olanları bu programlar profesyonel olmalarına ragmen sıkıstırdığımız dosyaları açarken bazı hatalarla karşılaşmışsınızdır.

Sıralama algoritmalrı kayıplı ve kayıpsız olmak üzere iki türlüdür. Kayıplı algoritmanın tek farkı sıkıstırma işleminden sonra tekrar eski veriye ulaşamamızdır aklınıza ozaman niçin böyle bişeye gerek var gibi bir soru gelebilir bunun için en güzel örnek video dosyalarıdır örneğin *.mgp uzantılı dosyalar veya resimler bu dosyalar belli şeklide sıkıştırılarak bu formatlara çevirilir kullandınız sıkıştırma katsayı ise sizin video ve resim kalitenizi belirtir kayıplı algoritmada sıkıştırma isleminde sonra veri ne kadar küçülürse bizim için kötüdür videoların boyutu küçükse kalitesizdir diye düşünürüz. Kayıpsız da ise tam tersi söz konusudur. Neyse konuyu fazla uzatmayalım :D kodlamaya geçelim

Öncelikle C:\\ dizinine  ismi serdar olan bir metin dosyası atın , uygulamamızda dosyalama işlemleri ve arraylist kullanacağımız için  system.IO ve system.collections kütüphanelerini ekleyelim

sıkıs

private void button1_Click(object sender, EventArgs e)
{
byte[] dizidoya;
string dosyayolu;
StreamReader dosya = File.OpenText(“c:\\serdar.txt”);
string deger = dosya.ReadToEnd();
dizidoya = System.Text.Encoding.UTF8.GetBytes(deger);
MessageBox.Show(deger.ToString());
sikistir(dizidoya);
}

private void button1_Click(object sender, EventArgs e)

{

byte[] dizidoya;

string dosyayolu;

StreamReader dosya = File.OpenText(“c:\\serdar.txt”);

string deger = dosya.ReadToEnd();

dizidoya = System.Text.Encoding.UTF8.GetBytes(deger);

MessageBox.Show(deger.ToString());

sikistir(dizidoya);//* fonksiyonumuzu çağırıyoruz

}

//*fonksiyonumuzu tanımlıyoruz

private void sikistir(byte[] dosyaoku)

{

char[] dizi = System.Text.Encoding.UTF8.GetChars(dosyaoku);

ArrayList siralidizi = new ArrayList();

ArrayList tekeleman = new ArrayList();

ArrayList kactane = new ArrayList();

ArrayList bulunannumara = new ArrayList();

ArrayList bitsayisi = new ArrayList();

ArrayList tambitsayisi = new ArrayList();

int adet = 0, j = 0, i = 0;

siralidizi.AddRange(dizi);

siralidizi.Sort();

while (i<=siralidizi.Count-2)

{

tekeleman.Add(siralidizi[i]);

adet = 0;

j = i + 1;

while ((char)siralidizi[i]==(char)siralidizi[j])

{

adet++;

j++;

}

if (adet == 0)

{

i++;

}

else

{

i = i + adet + 1;

}

kactane.Add(adet + 1);

}

tekeleman.Add(siralidizi[siralidizi.Count - 1]);

kactane.Add(“1″);

ArrayList siralitekeleman = new ArrayList();

siralitekeleman.AddRange(kactane);

int degertut;

Object degertut2;

for (int n = 0; n <= siralitekeleman.Count-1; n++)

{

for (int t = 0; t <= siralitekeleman.Count-1; t++)

{

if (Convert.ToInt32(siralitekeleman[n]) > Convert.ToInt32(siralitekeleman[t]))

{

degertut = Convert.ToInt32(siralitekeleman[n]);

siralitekeleman[n] = siralitekeleman[t];

siralitekeleman[t] = degertut;

degertut2 = tekeleman[n];

tekeleman[n] = tekeleman[t];

tekeleman[t] = degertut2;

}

}

}

for (int m = 0; m <=tekeleman.Count-1; m++)

{

bitsayisi.Add(“0″);

for (int z = 0; z < m; z++)

{

bitsayisi[m] = “1″ + bitsayisi[m];

}

}

for (int m = 0; m <=dizi.Length-1; m++)

{

Object eleman;

eleman = dizi[m];

int numara = tekeleman.IndexOf((Char)eleman);

tambitsayisi.Add(bitsayisi[numara]);

}

string bitler=”";

for (int m = 0; m <=dizi.Length-1; m++)

{

bitler += (string)tambitsayisi[m];

}

int adedi = bitler.Length;

int bitsay = adedi % 8;

if (bitsay!=0)

{

for (int c = 0; c <=7-bitsay; c++)

{

bitler += “1″;

}

this.Text = bitler;

char[] cozdizi = new char[(int)bitler.Length / 8];

for (int m = 0; m < cozdizi.Length-1; m++)

{

string ydeger;

ydeger = bitler.Substring(m * 8, 8);

int deg = 0;

for (int s = 0; s >= 0; s–)

{

int a;

a = Convert.ToInt32(ydeger[s].ToString())*(int)Math.Pow(2,7-s);

deg += a;

}

byte sayi = (byte)deg;

cozdizi[m] = (char)sayi;

}

byte[] dosyayaz = System.Text.Encoding.UTF8.GetBytes(cozdizi);

FileStream dosya = new FileStream(“yeniserdar.txt”, FileMode.OpenOrCreate);

dosya.Write(dosyayaz, 0, (int)cozdizi.Length);

}

programı çalıştırdıkdan sonra yeni oluşturulan dosyayı açtıgımızdacıktı

 
No Comments

Posted in C#, Makaleler