Как распечатать гекс из 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.