c ++ конвертировать 4 байта в UTC время - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу знать, как преобразовать 4-байтовое значение во время UTC. Язык C ++.

ex) Предположим, что 4 байта UTC равны 0xACE62100, тогда соответствующее время разделения будет 26 января 2000 г., 17: 09: 00

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Похоже, что отметка времени diff отправляется в сетевом порядке байтов, поэтому вам нужно преобразовать ее.На * nix (и, возможно, на других) для этого есть ntohl.

#include <iostream>
#include <ctime>
#include <arpa/inet.h>

int main() {
    std::time_t ts_raw = 0xACE62100;           // your input
    std::time_t ts_nh = ntohl(ts_raw);

    std::cout << asctime(gmtime(&ts_nh));      // your input converted

    // hardcoded 2000-01-01 00:00:00 UTC epoch
    std::time_t epoch_time = 0x386D4380;
    std::cout << asctime(gmtime(&epoch_time)); // 2000-01-01 00:00:00

    ts_nh += epoch_time;
    std::cout << asctime(gmtime(&ts_nh));      // your expected result
}

Вывод

Mon Jan 26 17:09:00 1970
Sat Jan  1 00:00:00 2000
Wed Jan 26 17:09:00 2000
0 голосов
/ 14 ноября 2018

Если смотреть детально, может показаться, что это значение с прямым порядком байтов; строка байтов ACE62100, интерпретируемая в порядке Intel, равна 0021E6AC, что при преобразовании в секунды дает:

25 days, 17 hours, 9 minutes and 0 seconds.

Следовательно, может показаться, что с полуночи 1 января 2000 года ваше время составляет порядковый номер секунды.

...