1
由於我開始搞亂XOR操作符和簡單的單字符密鑰加密,我遇到了以前從未見過的問題。該文本在第二次運行程序後,始終在其結尾處具有隨機ASCII字符。另一個問題是,在程序的每次迭代之後,文本「預訂」和「後序」都會被修改。我相信這其中的大部分是由於初學者的錯誤,尤其是在IO方面缺乏這些問題出現的經驗。C++中的cout,XOR和fileIO格式化問題
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ifstream ifile;
ofstream ofile;
string toProc;
string file;
char key = ' ';
cout << "Enter file location: \n";
cin >> file;
cout << "Enter key: \n";
cin >> key;
ifile.open(file);
if(ifile.is_open())
{
char temp;
temp = ifile.get();
toProc.push_back(temp);
while(ifile.good())
{
temp = ifile.get();
toProc.push_back(temp);
}
ifile.close();
}
else
{
cout << "No file found.\n";
}
cout << "Pre action: " << toProc << endl;
for(int i = 0; i < toProc.size(); i++)
toProc[i] ^= key;
cout << "Post action: " << toProc << endl;
ofile.open(file);
ofile << toProc;
ofile.close();
}
請注意,getLine()對解密部分不起作用,因爲加密的結果可能包括各種控制字符。爲了執行有意義的加密,你應該使用明確的字符編碼(但是再次,你不應該使用單個字符加密,爲了測試的目的,你應該能夠避開它)。 –
@owlstead啊,是的,沒錯。我曾以某種方式假定加密僅適用於這裏的字母字符,但您是對的,它也會影響行結尾。 – jogojapan
謝謝!檢查完eof後完成工作。文件IO始終是我的一個問題。 – Aer