Проблемы с печатью шестнадцатеричных значений с вектором с использованием printf

Моя проблема проста:

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]; read_word1 напечатает 0000000a пока read_word2 печатает 00000010 когда мы устанавливаем элемент в 10 (через write_word).

Чтобы решить эту проблему, я попытался использовать mem.at (адрес), приведение типов и даже преобразование в строку, но все безрезультатно. Вектор mem определяется как

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

в заголовочном файле класса.

Кажется, это основная проблема с вектором — что можно сделать?

РЕДАКТИРОВАТЬ:

Спасибо всем за вашу помощь. Чувствую, что тема была развенчана немного больше. Я не мог заставить его работать так, как я думал, но если вы передадите число в шестнадцатеричном виде, например. 000000aa в write_address, кажется, все работает! Все немного странно, но спасибо.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]