Vous devez faire la constante entière du bon type. Le problème est que 0x100000000
est interprété comme un int
, et la distribution/affectation n'aide pas: la constante elle-même est trop grande pour int
. Vous devez être en mesure de préciser que la constante est de type uint64_t
:
uint64_t Key = UINT64_C(0x100000000);
fera. Si vous ne disposez pas UINT64_C
disponibles, essayez:
uint64_t Key = 0x100000000ULL;
En fait, C99 (6.4.4.1p5):
Le type d'une constante entier est la première de la liste correspondante dont sa valeur peut être représentée.
et la liste des constantes hexadécimaux sans suffixe est:
int
long int unsigned int
long int
unsigned long int
long long int
unsigned long long int
Donc, si vous invoquez votre compilateur en mode C99, vous ne devriez pas recevoir un avertissement (merci Giles!).