我要保存的值为1并加载44的值?!
我在C ++中使用TinyXML2。
查看书面文件:
<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
};
有人可以看到问题吗?有人知道如何解决这个问题吗?
答案 0 :(得分:0)
=
这不是您应该做的。您不能像这样简单地进行转换,必须将字符串转换为整数。尝试static_cast<kwindow_mode>
。
顺便说一句,您不应获得44,而应获得49。此外,您可能无法正确编写xml,您必须将字符串传递给SetText,而不是整数或其他内容。