使用printf

时间:2017-03-26 23:41:15

标签: c++ vector printf uint32-t

我的问题很简单:

uint32_t memory::read_word1 (uint32_t address) {
  if(address>(maxWord)){
        return 0;
    }
    uint32_t temp = 10; 
    return temp; 


}

uint32_t memory::read_word2 (uint32_t address) {
      if(address>(maxWord)){
            return 0;
        }

        return mem[address];

    }

void memory::show_address (uint32_t address) {
    int temp=read_word(address);
    printf("%08jx\n", (uintmax_t)temp);
}

// Write a word of data to an address, mask contains 1s for bytes to be updated
void memory::write_word (uint32_t address, uint32_t data, uint32_t mask) {
    if(address>(maxWord)){
        int newMax = ceil(address/1024)*1024;
        for(int i=maxWord+1;i<=newMax;i++){
            mem.push_back(0);
        }
        maxWord=newMax;
    }

    data=data&mask;
    mem[address]=data&~mask;
    mem[address]=mem[address]|data;
}

read_word1和2返回要通过show_address打印的值。 read_word2是我们想要的功能。但是,我们发现的问题是当我们使用mem[address]从向量返回时;当我们将元素设置为10(通过write_word)时,read_word1将打印0000000a而read_word2将打印00000010

为了解决这个问题,我尝试过使用mem.at(地址),类型转换甚至转换为字符串,都无济于事。向量mem定义为

   std::vector<uint32_t> mem=decltype(mem)(1024,0);

在类头文件中。

这似乎是向量的潜在问题 - 可以做些什么?

修改

感谢大家的帮助。感觉像这个话题已经被揭穿了一点。我无法按照我认为的方式工作,但是如果你以十六进制传递数字,例如。 000000aa进入write_address一切似乎都有效!有点奇怪,但谢谢。

0 个答案:

没有答案