gpt4 book ai didi

c++ - Xerces XML 解析器,将 XMLCh* 转换为浮点型

转载 作者:行者123 更新时间:2023-11-30 17:08:01 25 4
gpt4 key购买 nike

我正在尝试通过套接字读取 XML 字符串并使用 Xerces 解析器对其进行解析,但我遇到了某些值的问题。这很奇怪,因为我所做的在代码中的其他点已经起作用,但是当我尝试在其他地方重用逻辑时它不起作用。这基本上是我所做的:

void Parser::ParseAB(DOMNode* node)
{
const XMLCh* aNode = XMLString::transcode("a");
const XMLCh* bNode = XMLString::transcode("b");
DOMNode* child = node->getFirstChild();
XMLCh *val, *childName;
char* charValue;
double aVal, bVal;

while(child)
{
childName = (XMLCh*)child->getNodeName();
val = (XMLCh*)child->getTextContent();
charValue = (char*)val;
if(XMLString::equals(childName, aNode))
{
aVal = atof((const char*)val);
}else if(XMLString::equals(childName, bNode))
{
bValue = atof((const char*)val);
}else std::cout<<"Unrecognized option\n";
child = child->getNextSibling();
}
m_pInfo->setAB(aVal, bVal);

}

我一直在 NetBeans 8.0.1 中调试代码,当我将鼠标悬停在“val”上以在其存储到 aVal 之前检查其内容时,我看到 0x600416920 L“33.456030344”。这对我来说看起来很好,因为 33.456030344 是我尝试存储的正确值。然而,调用 atof() 会产生值 3,这显然是不正确的。如果我将 XMLCh* 转换为 char* 并打印 char* 值,我也会得到 3。同样,bVal 的值应为 -31.32234,但对 atof 的调用返回值为零。当我将此 XMLCh* 转换为 char* 并打印 char* 时,仅打印负号。在我看来,只有第一个字符被转换为 float 或类似的东西。同样的逻辑在我的代码中的许多地方都有效,但我不明白为什么它在这里不起作用。是否有其他方法可以将 XMLCh* val 转换为具有正确值的 float ?

最佳答案

正如评论中提到的,问题在于 XMLCh 和 char 不是同一类型。更准确地说,XMLCh 是一个 char16_t,如下所示。

#define XERCES_XMLCH_T char16_t
typedef XERCES_XMLCH_T XMLCh;

它是普通 char 的两倍,这就是为什么当读取为 char* 时字符串会变得困惑。它将每个 XMLCh 分成 2 个字符。

将 XMLCh* 转换为 char* 的正确方法是:

char* charValue = XMLString::transcode(val);

然后,char* 就可以用于 char* 通常用于的任何用途。

还要记住释放用于 char* 的数据,因为 XMLString::transcode 分配了数据。像这样释放数据:

XMLString::release(&charValue);

关于c++ - Xerces XML 解析器,将 XMLCh* 转换为浮点型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33880905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com