我正在尝试将此correct_value
文件加载到结构中,然后插入到地图中。 correct_value
文件具有uint_64
个数字,uint_8
个数字被打印为文本。请参阅我提供的CorrValueEntry
结构。我缩小了一个问题,即我没有从file>>a
获得正确的值,每次调用a
后我都打印出file>>a
,它输出的是0
。
这是地图的结构
struct CorrValueEntry
{
uint64_t seqnum;
uint64_t actual_val;
uint64_t pc;
uint8_t piece;
uint8_t insn;
uint64_t dst;
uint64_t src1;
uint64_t src2;
uint64_t src3;
public:
CorrValueEntry(): seqnum(0),actual_val(0),pc(0),insn(8),piece(0),src1(0),src2(0),src3(0),dst(0) {}
};
这是我尝试读取正确值文件的代码
std::fstream file("correct_value");
uint64_t a;
if(file.is_open()) {
while (file >> a)
{
CorrValueEntry temp;
uint64_t temp_value = a;
//load seq_no
file >> a;
temp.seqnum = a;
//load actual value
file >> a;
temp.actual_val = a;
//load pc
file >> a;
temp.pc = a;
//load piece
file >> a;
temp.piece = a;
//load instruction type
file >> a;
temp.insn = a;
//load dst
file >> a;
temp.dst = a;
//load src1
file >> a;
temp.src1 = a;
//load src2
file >> a;
temp.src2 = a;
//load src3
file >> a;
temp.src3 = a;
CVT.insert(std::pair<uint64_t,CorrValueEntry>(temp_value,temp));
}
file.close();
}
else printf("file not opened\n");
这是用于清除地图的行
std::map<uint64_t,CorrValueEntry> CVT;
这里是正确值文件的样本,请注意,第一个数字是键,它等于seqnum;当我记录这些值时,将0x51b49c等打印为0x%lx。
0 0 0 0x51b49c 0 0 12 9 11 3735928559
2 2 4814308436412893359 0x51b4a4 0 0 9 9 11 3735928559
4 4 640 0x51b4ac 0 1 9 8 3735928559 3735928559
5 5 65535 0x51b4b0 0 0 10 3735928559 3735928559 3735928559
6 6 66175 0x51b4b4 0 0 9 9 10 3735928559
8 8 40499520 0x51b4bc 0 1 22 22 3735928559 3735928559
10 10 0 0x51b424 0 0 9 22 3735928559 3735928559
答案 0 :(得分:0)