2016-04-12 8 views
0

Ich möchte Zeit vom NTP-Server bekommen. Ich habe viele Beispiele gefunden, aber in meinem Fall bekomme ich vom Server immer dasselbe Datum. Ich weiß nicht, was falsch ist. Ich möchte das richtige Datum und die richtige Stunde bekommen, aber ich nicht.NTP-Server-Rückgabe immer gleich - falsches Datum (Windows)

unsigned char buf[1024]; 
... 
tmit=ntohl((time_t)buf[4]); // get transmit time 
//tmit=ntohl((time_t)buf[10]); //try this too 
time_t tempa = tmit; 
printf("Recieve time: %s",ctime(&tempa)); 
... 

Hier ist meine Ausgabe:

Recieve time: Thu Jan 01 01:00:00 1970 

Ich weiß nicht, warum dieses Datum empfangen oder warum falsches Datum neu berechnen. Wo ist das Problem? Ich arbeite in C++ unter Windows.

Antwort

2
tmit=ntohl((time_t)buf[4]); // get transmit time 

Sie werfen ein einzelnes Zeichen (buf[4]) zu einem time_t. Da eine unsigned char nur 256 mögliche Werte haben kann, kann eine Umwandlung in eine time_t nur 256 mögliche Werte haben. Das kann nicht stimmen.

+0

Wenn ich nicht Gießen ist das gleiche –

+0

Natürlich nicht. Das Problem ist, dass es nur 256 mögliche Eingaben für den Cast gibt, also nur 256 mögliche Outputs. Die exakt gleiche Logik würde gelten, wenn Sie die "Besetzung" durch irgendeine andere deterministische Operation ersetzen würden. "Es gibt nur 256 mögliche Eingaben für das X, also gibt es nur 256 mögliche Ausgaben ... das kann nicht stimmen." Ist wahr und weist auf Ihr Problem hin, ob "X" eine Besetzung oder irgendetwas anderes ist. Jede Funktion, deren Ausgänge rein eine Funktion ihrer Eingänge sind, kann nicht mehr Ausgänge als mögliche Eingänge haben. –

+0

Ich ändere 'unsigned char buf [1024];' zu 'time_t' buf und arbeite. Vielen Dank. –