首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从文件加载uint64_t值

从文件加载uint64_t值
EN

Stack Overflow用户
提问于 2019-04-24 02:54:52
回答 1查看 85关注 0票数 0

我正在尝试将这个correct_value文件加载到一个结构中,然后插入到一个映射中。correct_value文件将uint_64编号、uint_8编号打印为文本。请参阅我提供的CorrValueEntry结构。我缩小了问题的范围,我没有从file>>a中获得正确的值,我在每次调用file>>a之后打印出a,它输出的是0

下面是map的结构

代码语言:javascript
复制
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) {}

};

下面是我尝试读取correct_value文件的代码

代码语言:javascript
复制
 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"); 

下面是用于删除地图的行

代码语言:javascript
复制
std::map<uint64_t,CorrValueEntry> CVT;

这是一个正确的值文件示例,请注意,第一个数字是键,它等于seqnum;当我记录这些值时,0x51b49c或类似的内容被打印为0x%lx。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-04-24 03:18:08

十六进制值未被正确接受。

为了使其正确运行,请使用file对象的unsetf方法。

代码语言:javascript
复制
file.unsetf(std::ios::dec);
file.unsetf(std::ios::hex);
file.unsetf(std::ios::oct);

这将删除默认格式选项。

另请参阅:this answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55817710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档