2016-04-07 9 views
0

私は、メッセージの暗号化と復号化のために作ったツールを作った。私が軍隊などのために働いているわけではないので、私はちょうどコンセプトに興味を持っています。BinaryReaderとBinaryWriter for dynamic short array

各キャラクターが自分のバイナリフォーマットに変換されます。各文字は16ビット、またはshortに拡張されています。これらの短い整数のそれぞれは、単一の配列に格納されます。

私の目標は、この配列をバイナリでファイルに書き込んで、それを配列に読み戻すことです。私はそれがしたいようにそれが動作していないので、

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

はもちろん、私が間違ってそれについてつもりです:ここで

は、私が始めたものです。作者は動作しているかもしれませんが、65534バイトの配列全体を書き込みます。私はそれが格納されている文字(最後の非ゼロ文字までのすべて)を書き込むだけです。それから、読者はそれに対応する必要があります。ファイルから文字を読み込んで、書き出し時とまったく同じように配列に入れます。

質問にはどうすればいいですか?

+0

あなたは 'if(binaryStr [x]) 'で何かしようとしていましたが、うまくいきませんでしたか? – niksofteng

+0

私は早くループを終了しようとしていた...ちょうどそれについて行くべきか分からなかった。 –

+0

はい、それであなたはどんな問題に直面しましたか? – niksofteng

答えて

0

元の文字列の長さだけを保存することにしました。私はそれを書き込みループに使用し、ファイルに格納し、後でファイルから読み込みます。

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