Вам нужно сделать целочисленную константу правильного типа. Проблема в том, что 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, вы не должны получать предупреждение (спасибо Джайлз!).