У меня проблема с командой 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»
Я использовал значение sizeof для моей проблемы, я неправильно предположил, что он вернет размер строки. Я предполагаю, что, поскольку в вычислениях используется максимум 32 бита в любой момент, я могу использовать это вместо этого. Большое спасибо за помощь. – Ben