Sie benötigen die Integer-Konstante des richtigen Typs zu machen. Das Problem ist, dass 0x100000000
als int
interpretiert wird, und Casting/Zuweisung hilft nicht: die Konstante selbst ist zu groß für eine int
. Sie müssen in der Lage, zu spezifizieren, dass die Konstante der uint64_t
Typ ist:
uint64_t Key = UINT64_C(0x100000000);
wird es tun. Wenn Sie nicht UINT64_C
verfügbar verfügen, versuchen:
uint64_t Key = 0x100000000ULL;
In der Tat, in C99 (6.4.4.1p5):
Der Typ eines Integer-Konstante die erste von der entsprechenden Liste ist in welcher sein Wert dargestellt werden kann.
und die Liste für hexadezimale Konstanten ohne Suffix ist:
int
long int unsigned int
long int
unsigned long int
long long int
unsigned long long int
Also, wenn Sie Ihren Compiler in C99-Modus aufgerufen, sollten Sie nicht eine Warnung (Danke Giles!).