Сервер NTP всегда возвращает одно и то же - неправильная дата (Windows)

Я хочу получить время с NTP-сервера. Я нашел много примеров, но в моем случае я всегда получаю с сервера одну и ту же дату. Я не знаю, что не так. Я хочу получить точную дату и час, но я этого не делаю.

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

Вот мой результат:

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

Я не знаю, почему я получаю эту дату или почему пересчитываю неправильную дату. Где проблема? Я работаю на С++ в Windows.


person Nejc Galof    schedule 12.04.2016    source источник


Ответы (1)


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

Вы переводите один символ (buf[4]) в time_t. Поскольку unsigned char может иметь только 256 возможных значений, приведение к time_t может иметь только 256 возможных значений. Этого не может быть.

person David Schwartz    schedule 12.04.2016
comment
Если я не кастинг, то же самое - person Nejc Galof; 12.04.2016
comment
Конечно, нет. Проблема в том, что есть только 256 возможных входных данных для приведения, следовательно, есть только 256 возможных выходных данных. Точно такая же логика будет применяться, если вы замените приведение любой другой детерминированной операцией. Есть только 256 возможных входов в X, поэтому есть только 256 возможных выходов ... это не может быть правильным. Верно и указывает на вашу проблему, является ли X приведением или чем-то еще. Каждая функция, выходные данные которой являются исключительно функцией своих входных данных, не может иметь больше возможных выходных данных, чем возможных входных. - person David Schwartz; 12.04.2016
comment
Меняю unsigned char buf[1024]; на time_t buf и работаю. Спасибо. - person Nejc Galof; 12.04.2016