Как распечатать гекс из uint32_t?

Код, над которым я работал, требует, чтобы я напечатал переменную типа uint32_t в шестнадцатеричном, с отступом 0 с и минимальной длиной 8. Код, который я использовал для этого до сих пор:

printf("%08lx\n",read_word(address));

Где read_word возвращает тип uint32_t. Я использовал форматы jx, llx и т. Д. Безрезультатно, есть ли правильный формат, который можно использовать?

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

Я обнаружил, что проблема заключается в том, что я прохожу. Функция read_word возвращает значение из вектора uint32_t. Кажется, что это проблема, которая вызывает проблемы с выкладыванием hex. Является ли это передачей по ссылке / значению проблемы и что за исправление?

функция read_word:

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

    return mem[address];

}

замедление памяти:

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

2 ответа

Чтобы сделать это в C++, вам нужно использовать манипуляторы fill и width:

#include <iostream>
#include <iomanip>
#include <cstdint>

int main()
{
    uint32_t myInt = 123456;
    std::cout << std::setfill('0') << std::setw(8) << std::hex << myInt << '\n';
}

Выход

0001e240

Для C это становится немного более тупым. Ты используешь inttypes.h

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>


int main()
{
    uint32_t myInt = 123456;
    printf("%08" PRIx32 "\n", myInt);
    return 0;
}

Выход

0001e240

Обратите внимание, что в C константы из inttypes.h используются с функцией конкатенации языковых строк для формирования необходимого спецификатора формата. В качестве преамбулы вы указываете только нулевую и минимальную длину.

%jx+ Typecast

Я думаю, что это правильно

#include <stdio.h>
#include <stdint.h>

int main(void) {
    uint32_t i = 0x123456;
    printf("%08jx\n", (uintmax_t)i);
    return 0;
}

скомпилируйте и запустите:

gcc -Wall -Wextra -pedantic -std=c99 main.c
./a.out

Выход:

00123456

Дайте мне знать, если вы можете произвести неудачный тест.

Протестировано в Ubuntu 16.04, GCC 6.4.0.

Другие вопросы по тегам