2016-04-07 17 views
0

Ich habe ein Tool gemacht, das ich zum Verschlüsseln und Entschlüsseln von Nachrichten gemacht habe. Nicht, dass ich für das Militär arbeite oder so, ich habe mich nur für ein Konzept interessiert.BinaryReader und BinaryWriter für dynamisches kurzes Array

Es dauert jedes Zeichen und konvertiert es in mein persönliches Binärformat. Jedes Zeichen wird auf 16 Bit oder short erweitert. Jede dieser kurzen ganzen Zahlen wird in einem einzigen Array gespeichert.

Mein Ziel ist es, dieses Array in eine binäre Datei zu schreiben und es in das Array zurückzulesen. Hier

ist, was ich angefangen habe:

//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])); 
     } 
    } 
} 

Offensichtlich werde ich über es falsch, da es nicht funktioniert, wie ich es will. Der Writer funktioniert möglicherweise, schreibt jedoch das gesamte Array mit 65534 Bytes. Ich möchte, dass nur die gespeicherten Zeichen geschrieben werden (d. H. Alles bis zum letzten Zeichen ungleich null). Dann sollte der Leser dem entsprechen, indem er die Zeichen aus der Datei liest und sie genau so in das Array einfügt, wie sie exportiert wurden.

Die Frage ist also, wie mache ich das?

+0

Sie haben etwas mit 'if (binaryStr [x])' versucht, hat es nicht funktioniert? – niksofteng

+0

Ich würde versuchen, die Schleife früh zu beenden ... Ich wusste nur nicht, wo ich das machen soll. –

+0

Ja, mit welchem ​​Problem waren Sie konfrontiert? – niksofteng

Antwort

0

Ich entschied mich, nur die ursprüngliche Länge der Zeichenfolge zu speichern. Ich verwende es für die Schreibschleife, speichere es in der Datei und lese es später aus der Datei.

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])); 
      } 
     } 
    }