В вашем коде две проблемы:
Вы не знаете, какой суффикс использовать для определения литерала uint64_t
на целевой платформе.
Вы не знаете, какой спецификатор формата использовать в printf
для значений uint64_t
на целевой платформе.
Оба могут быть решены с помощью с использованием макросов, определенных в stdint.h .
В частности, чтобы определить литерал и присвоить его переменной:
uint64_t test = UINT64_C(0x1B26B354A1CF);
Для печати шестнадцатеричного значения переменной в printf
:
printf("%" PRIx64 "\n", test);
Это гарантированно работает на любой платформе, которая должным образом поддерживает uint64_t
, независимо от того, сколько бит его процессор.
Хотя сам язык не требует от вас использования суффикса для целочисленных литералов в большинстве случаев - заметное исключение - использование литерала непосредственно в качестве аргумента для функции с переменными числами, такой как printf
- это делается в явном виде является хорошей практикой в целом и может быть обязательной в руководящих принципах кодирования проектов, важных для безопасности. Например, правило 10.6 руководства MISRA C: 2004 требует использования суффикса U
для всех беззнаковых констант.