我的 substr() 命令有问题,我试图从示例内存管理模拟器中的一个地址拆分两个不同的地址。在下面的示例中: LoadParameters 函数获取一组 VirtualMemSize 和 PageFrameLength 值,用于计算应从何处拆分位字符串。
在示例中,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”