Usted debe proceder a la constante entera del tipo correcto. El problema es que 0x100000000
se interpreta como int
, y la conversión/asignación no ayuda: la constante en sí es demasiado grande para int
. Tienes que ser capaz de especificar que la constante es de tipo uint64_t
:
uint64_t Key = UINT64_C(0x100000000);
lo hará. Si usted no tiene UINT64_C
disponible, intente:
uint64_t Key = 0x100000000ULL;
De hecho, en C99 (6.4.4.1p5):
El tipo de una constante entera es el primero de la lista correspondiente en que su valor puede ser representado.
y la lista de constantes hexadecimales sin ningún sufijo es:
int
long int unsigned int
long int
unsigned long int
long long int
unsigned long long int
lo tanto, si se invocó su compilador en modo C99, que no deben recibir un aviso (gracias Giles!).