2012-04-29 2 views
2

У меня проблема с командой substr(), я пытаюсь получить два разных адреса, разделенных с одного адреса в примере симулятора управления памятью. В приведенном ниже примере: Функция LoadParameters получает набор значений для VirtualMemSize и PageFrameLength, которые используются для вычисления, где должна быть разделена бит-строка.substr() не принимает параметризованные значения

В примере LoadParameters() хранит значения для VirtualMemSize и PageFrameLength (соответственно 20 и 8). Это глобальные значения. Проблема в том, что код работает только в том случае, если я вводил числа вместо параметров. Я пробовал отливать переменные типа size_t, но не повезло:

int main(void) { 
    unsigned int VirtPageAddress;          
    unsigned int PhysPageAddress;          
    unsigned int OffsetAddress;           

    LoadParameters();           
    int VirtualAddress = 0xCAFEF00D; 
    string pagestring; 

    // Convert the hex address into a binary string and then 
    // split it into page index and offset. 

    string bitstring = bitset<sizeof(VirtualAddress) * 8> 
         (VirtualAddress).to_string();  

    cout << dec << VirtualMemSize << endl; 
    cout << dec << PageFrameLength << endl; 
    cout << bitstring << endl; 

    // (Reports: 20, 8 and "11001010111111101111000000001101" 

    // Extract relevant bits for the Page Index. 

    pagestring = bitstring.substr((32-VirtualMemSize),PageFrameLength); 

    // Convert the split string back into a number so that it 
    // can be manipulated. 

    VirtPageAddress = bitset<sizeof(pagestring)> 
         (pagestring).to_ulong();       
    cout << "0x" << hex << VirtPageAddress << endl; 
    return 0; 
} 

Ожидаемое значение: «0xEF»

Выходное значение: «0x0»

ответ

1

код работает, как ожидалось при компиляции с g ++ (после добавления нескольких включений и определений, которые вы оставили). Какой компилятор вы используете?

Помните, что sizeof (pagestring) возвращает размер класса, а не содержащую его строку; Я сомневаюсь, что это то, что вы намеревались, и определенно изменится в зависимости от вашей реализации компилятора/STL. Что вы имеете в виду в этом экземпляре шаблона?

+0

Я использовал значение sizeof для моей проблемы, я неправильно предположил, что он вернет размер строки. Я предполагаю, что, поскольку в вычислениях используется максимум 32 бита в любой момент, я могу использовать это вместо этого. Большое спасибо за помощь. – Ben

Смежные вопросы