2016-04-07 15 views
0

İletileri şifrelemek ve şifresini çözmek için yaptığım bir araç hazırladım. Ordu ya da herhangi bir şey için çalışmıyorum değil, sadece bir konseptle ilgilendim.Dinamik kısa dizi için BinaryReader ve BinaryWriter

Her karakteri alır ve kişisel ikili biçimime dönüştürür. Her karakter 16 bite veya short'a uzatılır. Bu kısa tam sayıların her biri tek bir dizide saklanır.

Amacım bu diziyi bir dosyaya ikili olarak yazmak ve diziye geri okuyabilmektir. İşte

Başladığım budur: Ben istedikleri gibi
//This is the array the encrypted characters are stored in. 
short[] binaryStr = new short[32767]; 

//... 

private void butSelInput_Click(object sender, EventArgs e) 
{ 
    dialogImportMsg.ShowDialog(); 
} 

private void dialogImportMsg_FileOk(object sender, CancelEventArgs e) 
{ 
    using (BinaryReader reader = new BinaryReader(new FileStream(dialogImportMsg.FileName, FileMode.Open))) 
    { 
     for (short x = 0; x < (short)reader.BaseStream.Length; x++) 
     { 
      binaryStr[x] = reader.ReadInt16(); 
     } 
    } 
} 

private void butExport_Click(object sender, EventArgs e) 
{ 
    dialogExportMsg.ShowDialog(); 
} 

private void dialogExportMsg_FileOk(object sender, CancelEventArgs e) 
{ 
    using (BinaryWriter writer = new BinaryWriter(new FileStream(dialogExportMsg.FileName, FileMode.OpenOrCreate))) 
    { 
     for (int x = 0; x < binaryStr.Length; x++) 
     { 
      //if(binaryStr[x] 
      writer.Write(BitConverter.GetBytes(binaryStr[x])); 
     } 
    } 
} 

Açıkçası ben işe yaramıyor yanlış beri bu konuda gidiyorum. Yazar çalışıyor olabilir, ancak 65534 bayt olan dizinin tamamını yazar. Sadece saklanan karakterleri (yani, sıfır olmayan karaktere kadar olan her şeyi) yazmak istiyorum. Daha sonra okuyucu buna karşılık gelmeli, karakterleri dosyadan okuyup, dizildikçe diziye yerleştirmelidir.

Soru şu ki, bunu nasıl yaparım?

+0

Eğer 'if (binaryStr [x])' ile bir şeyler deniyordun, işe yaramadı mı? – niksofteng

+0

Döngüyü erken sona erdirmeye çalışacaktım ... Sadece nereye gideceğini bilmiyordum. –

+0

Evet, bu konuda ne gibi bir sorun yaşadınız? – niksofteng

cevap

0

Orijinal dizenin uzunluğunu kaydetmeye karar verdim. Yazma döngüsü için kullanacağım, dosyada saklayacağım ve daha sonra dosyadan okuyacağım.

private void dialogImportMsg_FileOk(object sender, CancelEventArgs e) 
    { 
     using (BinaryReader reader = new BinaryReader(new FileStream(dialogImportMsg.FileName, FileMode.Open))) 
     { 
      binaryStrLen = reader.ReadInt16(); 
      for (short x = 0; x < binaryStrLen; x++) 
      { 
       binaryStr[x] = reader.ReadInt16(); 
      } 
     } 
    } 

    private void butExport_Click(object sender, EventArgs e) 
    { 
     dialogExportMsg.ShowDialog(); 
    } 

    private void dialogExportMsg_FileOk(object sender, CancelEventArgs e) 
    { 
     using (BinaryWriter writer = new BinaryWriter(new FileStream(dialogExportMsg.FileName, FileMode.OpenOrCreate))) 
     { 
      writer.Write(BitConverter.GetBytes(binaryStrLen)); 
      for (int x = 0; x < binaryStrLen; x++) 
      { 
       writer.Write(BitConverter.GetBytes(binaryStr[x])); 
      } 
     } 
    } 
İlgili konular