Итак, в настоящее время я пытаюсь реализовать счетчик программ MIPS, который включает в себя сохранение шестнадцатеричного значения для отслеживания того, где находится программа (счетчик программ). Но проблема в том, что следующий код не будет проходить после единичных цифр, так как он увеличивается, то есть 0,4,8,0 и т. Д., Где повторяющийся 0 должен равняться 10.
Этот источник работает, если str_pc изначально установлен в 00000010, но в противном случае это не так.
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <map>
using namespace std;
string str_pc = "00000008";
int main(){
int temp_pc;
stringstream ss;
ss << hex <<str_pc;
ss >> dec >> temp_pc;
cout << "Temp_PC: " <<temp_pc<<endl;
temp_pc = temp_pc+4;
ostringstream ss1;
ss1 << hex << temp_pc;
string x(ss1.str());
str_pc = x;
stringstream ss2;
ss2 << hex <<str_pc;
ss2 >> dec >> temp_pc;
cout << "Temp_PC: " <<temp_pc<<endl;
temp_pc = temp_pc+4;
ostringstream ss3;
ss3 << hex << temp_pc;
string y(ss3.str());
str_pc = y;
cout << str_pc <<endl;
}
Кто-нибудь может пролить свет на то, что я делаю неправильно?
шестнадцатеричное — это представление числа (целого числа) в строке.
ss << hex << str_pc;
ss >> dec >> temp_pc;
Это не имеет смысла. hex
Модификатор в первой строке не работает со строками, поэтому здесь бесполезен. С другой стороны, во второй строке вы используете int
так что вы должны положить hex
модификатор, делающий строку в буфере интерпретируемой как шестнадцатеричное число;
ss << str_pc;
ss >> hex >> temp_pc;