C ++ tinyxml2 загружает странные значения? - PullRequest
0 голосов
/ 22 ноября 2018

Я сохраняю значение 1 и получаю загруженное значение 44?!

Я использую TinyXML2 в C ++.

Посмотрите на записанный файл:

<mapping>
    <msaa>8</msaa>
    <vsync>true</vsync>
    <safemode>false</safemode>
    <winmode>1</winmode>
<mapping>

Сохранение файла:

string fpath = path + CONFIG_FILE_EXTENSION;
XmlDoc doc;
//win mode:
XMLElement* root = doc.NewElement("mapping");
XMLElement* win_mode = doc.NewElement("winmode");
win_mode->SetText(cfg.win_mode);
root->InsertFirstChild(win_mode);
//safe mode
XMLElement* safe_mode = doc.NewElement("safemode");
safe_mode->SetText(cfg.safe_mode);
root->InsertFirstChild(safe_mode);
//vsync
XMLElement* vsync = doc.NewElement("vsync");
vsync->SetText(cfg.vsync);
root->InsertFirstChild(vsync);
//msaa
XMLElement* msaa = doc.NewElement("msaa");
msaa->SetText(cfg.msaa);
root->InsertFirstChild(msaa);
doc.InsertFirstChild(root);
doc.SaveFile(fpath.c_str());

И загрузка его:

auto* cfg = new gsettings();
XmlDoc doc;
doc.LoadFile(fpath.c_str());
XMLElement* root = doc.FirstChildElement("__kestd.mapping");
if (root == nullptr)
    return cfg;
//winmode
XMLElement* win_mode = root->FirstChildElement("winmode");
cfg->win_mode = static_cast<kwindow_mode>(*win_mode->GetText());
//safemode:
XMLElement* safe_mode = root->FirstChildElement("safemode");
cfg->safe_mode = static_cast<bool>(*safe_mode->GetText());
//vsync:
XMLElement* vsync = root->FirstChildElement("vsync");
cfg->vsync = static_cast<bool>(*vsync->GetText());
//msaa:
XMLElement* msaa = root->FirstChildElement("msaa");
cfg->msaa = static_cast<char>(*msaa->GetText());
return cfg;

Если я напечатаю cfg->winmode, я получу 44?Как?Перечисление:

enum window_mode : byte //<< byte is a typedef for char
{
    fullscreen = 1, //How can it read 44?!
    windowed = 0
};

Кто-нибудь может увидеть проблему?Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 23 ноября 2018

static_cast<kwindow_mode> Это не так, как вы должны это сделать.Вы не можете просто так разыграть, вы должны преобразовать строку в целое число.Попробуйте atoi.Кстати, вы не должны получать 44, вы должны получить 49. Также вы можете не писать правильно xml, вам нужно передавать строки в SetText, а не целые числа или что-то еще.

...