FILETIME: 64-bit integer
-
Hallo,
Ich steh grad irgendwie auf dem Schlauch
Ich versuch grad irgendwie einen 64-Bit Wert in ne Variable reinzubekommen. Aber der Compiler sagt immer "integer constant is too large for "long" type"
nun hab ich in der GNU C Library einen int64_t gefunden. Mit sizeof(ini64_t) geschaut. Und siehe da, der hat tatsächlich 64-Bit oder auch 8byte
Aber: Warum gibt mein Compiler immernoch die Meldung aus? Es werden immer nur die letzten 4 Byte gespeichert? Was mach ich falsch? Und wie kann ich das beheben?
Hier ein kleines Test Progrämmchen:#include<stdint.h> // für int64_t #include<stdio.h> #include<stdlib.h> #include<limits.h> //für CHAR_BIT int main() { int64_t filetime=0x805A6A5183AAC601; //0x80 5A 6A 51 83 AA C6 01; printf("%X\n", filetime); printf("int64_t benoetigt %d Bytes (%d Bit) an Speicherplatz\n", sizeof(int64_t), sizeof(int64_t) * CHAR_BIT); system("PAUSE"); }
Ausgabe des Progr:
83AAC601
int64_t benoetigt 8 Bytes (64 Bit) an SpeicherplatzIch benutzte den Dev-C++ mit neustem MinGW
Gruß Chris
-
du hast einen 0x80..., also muss es ein unsigned sein (>= 2**63): uint64_t
-
int main() { uint64_t filetime=0x805A6A5183AAC601ULL; printf("%X\n", filetime); printf("uint64_t benoetigt %d Bytes (%d Bit) an Speicherplatz\n", sizeof(uint64_t), sizeof(uint64_t) * CHAR_BIT); system("PAUSE"); }
ist das selbe. durch das suffix ULL kommt zwar kein Warning mehr, aber die Zahl passt immer noch nicht rein
Wie kann ich das in den griff bekommen?
Oder liegt es daran das ich nur eine 32Bit CPU hab? Oder is der Compiler mist?
-
Ich schätze die Zahl passt schon rein, nur die Ausgabe berücksichtigt nur 32 bit
Du musst printf schon sagen, dass dort 8 Byte kommen. Versuch mal %llX
-
geht irgendwie nicht mit C. Oder ich bekomms nicht hin
die ausgabe jedenfalls nicht.
Mit C++ Code gehts. Nunja muss ichs halt mit C++ machen
Muss irgendwie am printf liegen. Mit cout gehts hervorragend.
-
-
Das erklärt einiges.
Zum Bsp. warum es mit dem GCC unter Linux geht aber nicht mit dem MinGW unter Windows. Hab immer nur die Docu vom GCC nachgeschaut, da hab ich das natürlich nicht finden können.Danke