Что это (0x01000000) и как его хранить? - PullRequest
1 голос
/ 30 июня 2011

Итак, я создал 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 (фактический файл имеет несколько карточек записи)

<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

1 Ответ

2 голосов
/ 30 июня 2011

Преобразование строки в поток строк и считывание значения в целое число. Использование atoi(abc), вероятно, также будет работать.

#include <ios>
#include <sstream>

int i;
string abc = "0x001";

stringstream convert ( abc );

convert>> std::hex >> i;

Большая часть этого кода была получена из 10-секундного поиска в Google.

...