2017-03-05 12 views
1

すべてのASCII値が256までの.txtファイル内のすべてのASCII値をXORしたいと思う。私の入力.txtファイルには16進形式のASCII値が入っている。例えば、私の入力ファイルは"49 f3 54 f3 5f f3 47 f4 43 e8 49 e9"であり、0x01、0x02、0x03などの各値をXORして、結果を新しいすべての16進数の行。私は以下のコードをC++で書いていますが、常に元の内容を表示します。ASCII値をXOR入力にループする

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

using namespace std; 

int main() { 

vector <char> decrypt; 
char ch; 
int index; 

ifstream infile; 
ofstream outfile; 

infile.open("prob3.txt"); 
outfile.open("results3_p1.txt"); 

if(!infile) 
{ 
    cout << "Error opening input file" << endl; 
    return 0; 
} 

for (int a = 0; a < 256; a++) 
{ 

    while(infile >> hex >> index) 
    { 
     ch = index^a; 
     decrypt.push_back(ch); 
    } 

    for (int i=0; i<decrypt.size(); i++)  // Print the results 
    { 
     outfile << decrypt[i]; 
    } 
    outfile << endl; 

} 

return 0; 
} 

"decrypt.clear()"を使用してベクターをクリアしようとしましたが、最初の繰り返しの後に何も印刷されません。私のコードのどの部分が間違っているのか分かりません。

私のコードの出力 -

enter image description here

答えて

1

あなたは 'キー' に変更されていません。たぶんあなたは代わりに 'a'を使う必要がありますか?

最初に反復した後でファイルの最後に到達します。ファイルポインタをリセットする必要があるかもしれません。しかし、これは効率的ではありません。あなたはおそらく、常に同じ解読配列(最初の反復中に初期化された)を繰り返し繰り返します。

ファイルからのすべての値をいくつかの配列に格納してから、この配列を繰り返し処理します。

私のようなものをお勧めしたい:あなたは0で値をXORしたいので「」実際には「キー」またはその逆でなければなりません... 256あなたのループ変数を

while(infile >> hex >> index) 
{ 
     decrypt.push_back(index); 
} 
for (int a = 0; a < 256; a++) 
{ 
    for (int i=0; i<decrypt.size(); i++)  // Print the results 
    { 
     ch = decrypt[i]^a;  
     outfile << ch; 
    } 
    outfile << endl; 
} 
+0

私は間違いを修正するためにコードを編集しました –

+0

動作しますか?私にとってはまだコードが動作していないように見えます。サンプルを追加しました。コピー貼りですので、いくつかのタイプミスがあります。しかし一般的にはうまくいくはずです。あなたはおそらく(char) – vadim

+0

にキャストする必要があります@vadim –

0

を。

+0

を使用していただきありがとうございます..私はコードを編集しました –

関連する問題