Я вроде как пытаюсь расшифровать мои файлы сохранения. И я придумал это. Но перемещение символов из файла сохранения не работает должным образом. Только цифры, похоже, восстанавливаются правильно, но все остальные символы, похоже, меняются на странные символы. Как вы можете видеть, я смещаю смену savecontent < < 1 влево, а при загрузке я битовый сдвиг входящей строки >> 1 вправо. Но это не работает, как я ожидал. Не работает ли бит-сдвиг на строках?Bit-Shift строка для декодирования файла сохранения C++
void erGuiManager::SaveToFile(string filename) {
ofstream ifs;
ifs.open(filename, ios::binary);
if (ifs.is_open())
{
string savecontent = "";
for (int i = 0; i < guiItems.size(); i++) {
if (dynamic_cast<erGuiBasicNode*>(guiItems[i])) {
savecontent.append(dynamic_cast<erGuiBasicNode*>(guiItems[i])->save(true));
}
}
for (int i = 0; i < savecontent.length(); i++) {
savecontent[i] = savecontent[i] << 1;
}
ifs.write(savecontent.c_str(), strlen(savecontent.c_str()));
ifs.close();
}
else {
cout << "Error: Unable to open file " << filename;
}
}
void erGuiManager::LoadFromFile(string filename) {
string line;
string out;
ifstream myfile(filename);
if (myfile.is_open())
{
while (getline(myfile, line))
{
for (int i = 0; i < line.length(); i++) {
line[i] = line[i] >> 1;
}
out.append(PasteNodeFromString(line,true));
}
ConnectBezierLines(out);
myfile.close();
}
}
Бит сдвига не является обратимым. Вы теряете наивысший бит в своем случае. Это должно работать, если вы используете только базовые символы ascii, которые все <128. Обратимой операцией будет поворот. –
Могу я спросить ... Почему? –
'ifs.write (savecontent.c_str(), strlen (savecontent.c_str()));' - Это не будет работать так, как ожидалось, если 'savecontent' содержит встроенные символы' '\ 0''. «Strlen» остановится при первом нулевом байте. – PaulMcKenzie