2

我的 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”

4

1 回答 1

1

使用 g++ 编译时,代码按预期工作(在添加了一些您遗漏的包含和定义之后)。你用的是什么编译器?

请记住 sizeof(pagestring) 返回类的大小,而不是它包含的字符串;我怀疑这是您的意图,并且肯定会根据您的编译器/STL 实现而改变。你在那个模板实例化中真正的意思是什么?

于 2012-04-29T16:09:11.730 回答