2016-04-12 13 views
0

NTPサーバーから時刻を取得したい。私は多くの例を見つけましたが、私の場合、私はサーバーから常に同じ日付を取得します。私は何が間違っているのか分からない。私はカレンダーの日付と時間を取得したいが、私はしない。この日付を受け取るか、なぜ間違った日付に再計算なぜ私にはわからないNTPサーバーは常に同じ返信 - 間違った日付(ウィンドウ)

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

は、ここに私の出力です。問題はどこですか?私はWindowsでC++で作業しています。

答えて

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

あなたはtime_tに単一の文字(buf[4])をキャストしています。 unsigned charには256の値しか指定できないため、time_tへのキャストには256の値しか設定できません。それは正しいことではありません。

+0

キャストしていない場合は同じです –

+0

もちろんです。問題は、キャストの可能な入力が256個しかないため、256個の可能な出力しか存在しないことです。 「キャスト」を他の決定的な操作に置き換えた場合、まったく同じロジックが適用されます。 "Xには256個しか入力できませんので、256個の可能な出力しかありません。正しいとは言えません。"真実であり、 "X"がキャストか何か他のものであるかどうかをあなたの問題を指摘する。出力が純粋に入力の関数であるすべての関数は、可能な入力より多くの可能な出力を持つことはできません。 –

+0

'unsigned char buf [1024];を' time_t' bufに変更して動作させます。ありがとうございました。 –

関連する問題