从文件

时间:2019-04-23 18:54:52

标签: c++

我正在尝试将此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

1 个答案:

答案 0 :(得分:0)

十六进制值未正确接受。

为了使其正常运行,请使用e.preventDefault对象的unsetf方法。

file

这将删除默认的格式设置选项。

另请参阅:this answer