【发布时间】:2018-07-26 19:52:11
【问题描述】:
在我的程序中,我需要读取存储在 xml 文件中的 guid 值。这是xml文件的样子。
<data>
<id>3AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE</id>
</data>
我的程序需要在 GUID 类型变量中读取此值。以下是我为此准备的。
#include "stdafx.h"
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <string>
#include <iostream>
#include <Windows.h>
namespace pt = boost::property_tree;
#pragma comment(lib, "rpcrt4.lib")
int main()
{
pt::ptree tree;
std::string filename = "data.xml";
pt::read_xml(filename, tree);
std::string idStr = tree.get<std::string>("data.id");
std::cout << "id as string = " << idStr << std::endl;
GUID idAsGuid;
auto res = UuidFromStringW((RPC_WSTR)idStr.c_str(), &idAsGuid);
if (FAILED(res))
{
std::wcerr << L"Conversion failed with error: 0x" << std::hex << res << std::endl;
}
return 0;
}
变量 idStr 获取正确的值,但 idAsGuid 变量(即 GUID 类型)获取不正确的值(类似于 CCCCC-CCCC-CCCC-CCCCCCCCCCCCC)。我哪里错了?
【问题讨论】:
-
关于术语的说明:这里没有casting。
-
你能指出我需要做什么演员吗?
-
你使用一个函数来解析和理解一些输入字符串。铸造是例如将字符转换为整数,如
static_cast<int>('a')。 -
看起来你正在将一个(指向一个)“窄”字符串转换为一个(指向一个)“宽”字符串。请改用正确的函数(以“A”结尾,而不是“W”)或转换(而不是强制转换)您的输入。
-
@BKS 各种口味?只有
UuidFromStringW和UuidFromStringA两种口味,第二种是正确的,去掉你的演员(RPC_WSTR),你不需要它。
标签: c++ visual-studio boost boost-propertytree