2016-12-08 2 views
0

ファイルを暗号化するためにC++ファイルストリームを使用しました。 補完を使用してファイルを暗号化する

ifstream input("Normal file"); 
ofstream output("encrypted file"); 
char ch; 
while (input >> ch) 
{ 
    ch = ~ch; 
    output << ch; 
} 

は私が 暗号化されたファイルから 通常のファイルを回復するために、同じプログラムを使用:この中で、読んですべての文字は、1つの補完し、出力ファイルに書かれています。しかし、暗号化されていないファイルには空白やリターンマークがないことがわかりました。そこで、私はwhile部分を次のように変更しました:

while (input >> ch) 
{ 
    ch = isspace(ch) ? ch : ~ch; 
    output << ch; 
} 

結果が私の予想した結果ではありません。どこで私は間違えましたか?

+0

あなたは何を期待しましたか?あなたはそれについて説明できますか? –

+3

主な問題点の1つは、入出力演算子 '>>'と '<<'は基本的には*テキスト関数です。ビット補完を行うと、一部の文字が「テキスト」として表示されなくなることがあります。バイナリファイルやその他の関数を使用してデータを読み書きします。 –

+0

空白文字を読み込むために 'input.get()'を試してください。 – James

答えて

1

問題は、ファイルを読んでいるかである:

デフォルトで
char ch; 
while (input >> ch) 

は、ストリーム抽出器は、すべての空白をスキップします。

input >> std::noskipws; 

... 前に、ストリームからの読み込みを開始:それはそれを停止するために取得するには、あなたのような何かを行うことができます。

関連する問題