Как напечатать 64-битное целое число как шестнадцатеричное?
В следующем коде я пытаюсь вывести значение переменной unit64_t
, используя printf()
. Компиляция кода с помощью gcc возвращает следующее предупреждение:
warning: format '% x ожидает аргумент типа unsigned int, но аргумент 2 имеет тип 'uint64_t [-Wformat =]
Код:
#include <stdio.h>
#include <stdint.h>
int main ()
{
uint64_t val = 0x1234567890abcdef;
printf("val = 0x%x\n", val);
return 0;
}
Выход:
val = 0x90abcdef
Ожидаемый результат:
val = 0x1234567890abcdef
Как я могу вывести 64-битное значение в виде шестнадцатеричного целого с помощью printf()
? В этом случае спецификатор x
кажется неправильным.
Ответы
Ответ 1
Предупреждение от вашего компилятора сообщает вам, что ваш спецификатор формата не соответствует типу данных, который вы передаете ему.
Попробуйте использовать %lx
или %llx
. Для большей переносимости включите inttypes.h
и используйте макрос PRIx64
.
Например: printf("val = 0x%" PRIx64 "\n", val);
(обратите внимание, что это конкатенация строки)
Ответ 2
Редактировать: Использовать printf("val = 0x%" PRIx64 "\n", val);
вместо.
Попробуйте printf("val = 0x%llx\n", val);
, Смотрите страницу руководства printf:
ll (ell-ell). Следующее целочисленное преобразование соответствует аргументу long long int или unsigned long long int или следующее n-преобразование соответствует указателю на аргумент long long int.
Редактировать: еще лучше то, что написал @M_Oehm: для этого есть специальный макрос, потому что unit64_t
не всегда unsigned long long
: PRIx64
см. Также fooobar.com/info/33325/...