ПК издает звуковые сигналы, когда XOR шифрует строку и сохраняет ее в текстовом файле.

Я использую XOR для шифрования параметров, которые я записываю в текстовый файл, и расшифровываю их, когда я читаю их.

Ниже приведен код для шифрования параметров и записи их в файл:

Settings settings;
const char key = 'x';

std::stringstream ss;
std::string original = "";
std::string encrypted = "";
std::ofstream file("./data/options.txt");

if (file.good()) {
file.clear();

// Build options string
ss << "limitfps=" << (settings.getLimitFramerate() ? "1" : "0") << std::endl;
ss << "fps=" << settings.getFramerateLimit();
// etc...

// Encrypt
original = ss.str();
for (std::size_t temp = 0; temp < original.size(); ++temp) {
encrypted += original[temp] ^ (static_cast<int>(key) + temp) % 255;
}

// Print and write to file
std::cout << "Saving encrypted data to file:\n" << encrypted << std::endl;
file << encrypted;
file.close();
}

Все работает, но мой компьютер почему-то издает 3 звуковых сигнала. Как сделать так, чтобы он не издавал звуковые сигналы?

И поскольку это в коде, другой вопрос: мне не нужно file.close() в конце, верно? Я прочитал это close() автоматически вызывается при достижении конца области?

Спасибо

0

Решение

encrypted будет содержать непечатаемые символы, поэтому, когда вы распечатываете их на консоль, вы получаете некоторый мусор, отправляемый на консоль.

Часть этого мусора, очевидно, является кодом ASCII 0x07/^G/BEL, который вызывает консоль звуковой сигнал.

Чтобы решить проблему, либо не печатайте encryptedили распечатайте его так, чтобы непечатные символы отфильтровывались или форматировались как шестнадцатеричные или что-то в этом роде.

3

Другие решения

Я предполагаю, что ваша зашифрованная строка, которую вы передаете на стандартный вывод, содержит три раза символ 0x07, псевдоним «Bell».

1