Найти - Пользователи
Полная версия: Генерация ntp метки на основе timestamp
Начало » Network » Генерация ntp метки на основе timestamp
1
sinbad13
Всем привет! Имеется задача получить ntp метку из timestamp в данный момент времени.
Есть данные: timestamp 1447440534 и ntp 15704244410975025152, это 13 ноября 2015 18:48:54

Есть функция получения на Си:
 #include <iostream>
constexpr uint64_t epochdelta = 2208988800L;
int main()
{
    uint64_t num= 15704244410975025152ULL;
    uint32_t seconds  = (uint32_t)(num >> 32);
    std::cout << seconds << " seconds since 1900"  << std::endl;
    std::cout << seconds - epochdelta << " seconds since 1970" << std::endl;
    return 0;
}

Пытаюсь в обратном порядке написать для Питона, пока имеется:

 import time
 timestamp = int(time.time())
 print timestamp
 # >> 1487608712
 ntpstamp = int(timestamp + 2208988800)
 print ntpstamp
 # >> 3696597512

Далее из 3696597512 вроде как необходимо сделать маску первых 32 бит, пока с масками не сталкивался, нашел информацию про &= 0xfffffff0.
Применение:
 ntpstamp &= 0xfffffff0
 # >> 3696597512
 
дает тот же результат 3696597512, что я делаю неправильно?)
FishHook
sinbad13
ntpstamp = int(str(timestamp + 2208988800))
Объясните, зачем числа кастовать к строке и сразу же к числу. Этому есть рациональное объяснение?
sinbad13
FishHook
Сначала да, там был такой код
 ntpstamp = int(str(timestamp + 2208988800) + '00000000')

В интернете находил js решение, попробовал так же подставить, но так и не получилось, поэтому отказался от него, а преобразование осталось)
sinbad13
Все оказалось гораздо проще
 ntpstamp32bit = (ntpstamp << 32)
 print ntpstamp32bit
 # >> 15877526162302304256
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB