c++ - 这是什么 (0x01000000) 以及如何存储它?

标签 c++ xml hex tinyxml

因此,我创建了一个 XML 文件,用于配置已构建的应用程序。到目前为止,它是用表示闪存中偏移值的常量进行硬编码的。

enum {
    MAIN_FLASH_OFFSET      = 0x01000000,
    LOADER_FLASH_OFFSET    = 0x01e00000,
    MICROCODE_FLASH_OFFSET = 0x00060400,
    DRIVER_FLASH_OFFSET    = 0x00100000,
    OTHER_FLASH_OFFSET     = 0x00500000
} ModuleOffsets;

我修改了应用程序以从 XML 文件中读取,以根据用户选择的显卡动态配置这些偏移量。

在我的一个头文件中,我添加了以下内容来替换之前的enum:

    int MAIN_FLASH_OFFSET;
    int LOADER_FLASH_OFFSET;
    int MICROCODE_FLASH_OFFSET;
    int DRIVER_FLASH_OFFSET;
    int OTHER_FLASH_OFFSET;

这是我的问题。我正在使用 TinyXML 来解析文档。下面是 XML 的一部分,以及我想要提取这些值的代码。当它试图将其拉入时,遇到了麻烦,因为 GetText() 返回一个字符串,并且值(0x01000000 等...)是整数(至少我认为是这样。

那么我该如何存储这些呢?我真的不知道,但我觉得我很接近。

XML(实际文件有多个card条目)

<EGCs xmlns="http://tempuri.org/XMLSchema.xsd">
  <card type="EGC1">
    <offsets>
      <flashOffset>0x01000000</flashOffset>
      <loaderFlashOffset>0x01e00000</loaderFlashOffset>
      <microFlashOffset>0x00060400</microFlashOffset>
      <driverFlashOffset>0x00100000</driverFlashOffset>
      <otherFlashOffset>0x00500000</otherFlashOffset>
    </offsets>
  </card>
</EGCs>

代码

    COFPFileGeneratorDlg ofp;
    TiXmlDocument doc("EGC_Cards.xml"); 
    if(doc.LoadFile())
    {
        TiXmlHandle hDoc(&doc);
        TiXmlElement *pRoot, *pParm;
        pRoot = doc.FirstChildElement("EGCs");
        if(pRoot)
        {
            pParm = pRoot->FirstChildElement("card");
            while(pParm)
            {
                if(pParm && pParm->Attribute("type") == m_dConfigDlg.m_strEGCType)
                {
                    ofp.MAIN_FLASH_OFFSET = pRoot
                        ->FirstChildElement("card")
                        ->FirstChildElement("flashOffset")
                        ->GetText();

                        [...]
                        // close braces

最佳答案

将字符串转换为字符串流并将值读入整数。使用 atoi(abc) 也可能有效。

#include <ios>
#include <sstream>

int i;
string abc = "0x001";

stringstream convert ( abc );

convert>> std::hex >> i;

大部分代码来自 10 秒的谷歌搜索。

关于c++ - 这是什么 (0x01000000) 以及如何存储它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526642/

相关文章:

c++ - boost::coroutine2 与 CoroutineTS

c++ - 算术运算符(+)运算符是否会检查返回类型和传递参数?

android - 高程阴影被剪裁

windows - 如何通过脚本在windows下编辑二进制文件

c++ - 为什么反斜杠作为转义字符而不是较少使用的字符?

C++ 迭代器 - 推导维度

java - Hibernate IllegalArgumentException 调用 setter

c# - 使用 XmlNamespaceManager 从 XmlNode 中选择

C 将无符号字符转换为十六进制

c++ - strtol 对两个不同的十六进制字符串给出相同的答案