1

我的问题很简单:

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(address)、类型转换甚至转换为字符串,但都无济于事。向量mem定义为

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

在类头文件中。

这似乎是向量的一个潜在问题——可以做什么?

编辑:

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

4

0 回答 0