Xerces XML解析器,将XMLCh*转换为float
Xerces XML parser, converting XMLCh* to float
我试图通过套接字读取一个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 optionn";
child = child->getNextSibling();
}
m_pInfo->setAB(aVal, bVal);
}
我一直在NetBeans 8.0.1中调试代码,当我将鼠标悬停在"val"上以在其存储在aVal中之前检查其内容时,我会看到0x600416920 L"33.456030344"。这对我来说很好,因为33.456030342是我试图存储的正确值。但是,对atof()的调用会产生值3,这显然是不正确的。如果我将XMLCh*转换为char*并打印char*值,我也会得到3。类似地,bVal的值应该是-31.32234,但对atof的调用返回的值为零。当我将这个XMLCh*转换为char*并打印char*时,只打印负号。在我看来,只有第一个字符被转换为浮点或类似的东西。同样的逻辑在我的代码中的许多地方都起了作用,我不明白为什么它在这里不起作用。有没有其他方法可以将XMLCh*val转换为具有正确值的浮点数字?
如注释中所述,问题在于XMLCh和char不是同一类型。更确切地说,XMLCh是char16_t,如下所示。
#define XERCES_XMLCH_T char16_t
typedef XERCES_XMLCH_T XMLCh;
这是普通字符的两倍大,这就是为什么当作为char*读取时字符串会出错的原因。它将每个XMLCh分成2个字符。
将XMLCh*转换为char*的正确方法是:
char* charValue = XMLString::transcode(val);
然后,char*可以用于char*通常用于的任何用途。
还要记住释放用于char*的数据,因为XMLString::对分配的数据进行代码转换。像这样释放数据:
XMLString::release(&charValue);
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- Xerces XML解析器,将XMLCh*转换为float