Как напечатать 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/...