substr() コマンドに問題があります。メモリ管理シミュレーターの例で、1 つのアドレスから 2 つの異なるアドレスを分割しようとしています。以下の例では: 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」