2016-04-12 19 views
0

NTP sunucusundan zaman almak istiyorum. Çok fazla örnek buldum ama benim durumumda sunucudan her zaman aynı tarihte. Neyin yanlış olduğunu bilmiyorum. Tarih ve saati sorgulamak istiyorum ama yapmam. Bu tarihi alma ya da neden yanlış tarihe yeniden hesaplamak neden bilmiyorumNTP sunucusu her zaman aynı döner - yanlış tarih (pencereler)

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

:

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)); 
... 

İşte benim çıkıştır. Problem nerede? Windows'ta C++ 'da çalışıyorum.

cevap

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

Bir time_t bir tek karakterle (buf[4]) döküm vardır. unsigned char yalnızca 256 olası değere sahip olabileceğinden, time_t için bir döküm yalnızca 256 olası değere sahip olabilir. Bu doğru olamaz.

+0

Dökülmezsem aynı –

+0

Elbette değil. Sorun şu ki, dökümciye sadece 256 olası giriş var, bu yüzden sadece 256 olası çıktı var. "Cast" kelimesini başka deterministik işlemlerle değiştirirseniz, aynı mantık geçerli olur. "X'e sadece 256 olası giriş var, bu yüzden sadece 256 olası çıktı var ... bu doğru olamaz." Doğru ve "X" bir döküm ya da başka bir şey olup olmadığını sorununuzu işaret ediyor. Çıkışları tamamen kendi girişlerinin bir fonksiyonu olan her işlev, olası girdilere göre daha fazla çıkışa sahip olamaz. –

+0

İmzasız char buf [1024]; 'time_t' buf 'a çalışıyorum ve çalışıyorum. Teşekkür ederim. –

İlgili konular