好的,所以我正在尝试实现一个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;
}
任何人都可以对我做错了吗?
答案 0 :(得分:3)
十六进制表示字符串中的数字(整数)。
ss << hex << str_pc;
ss >> dec >> temp_pc;
这没有意义。第一行中的hex
修饰符对字符串不起作用,因此在这里没用。另一方面,在第二行使用int
,所以你应该放置hex
修饰符,使缓冲区中的字符串被解释为十六进制数字;
ss << str_pc;
ss >> hex >> temp_pc;