Вам нужно сделать целую константу правильного типа. Проблема заключается в том, что 0x100000000
интерпретируется как int
, а литье/присвоение не помогает: сама константа слишком велика для int
. Вы должны быть в состоянии определить, что константа имеет uint64_t
типа:
uint64_t Key = UINT64_C(0x100000000);
сделает это. Если у вас нет UINT64_C
доступных, попробуйте:
uint64_t Key = 0x100000000ULL;
В самом деле, в C99 (6.4.4.1p5):
Тип целой константы является первым из соответствующего списка в который может быть представлен.
и список шестнадцатеричных констант без какого-либо суффикса:
int
long int unsigned int
long int
unsigned long int
long long int
unsigned long long int
Так что, если вы запустили ваш компилятор в режиме C99, вы не должны получить предупреждение (спасибо Giles!).