将 NTP 短格式转换为秒
Convert NTP Short Format to Seconds
我正在尝试将 RFC 5905 NTP Short Format 转换为秒。 NTP 短格式是 uint32_t,前 16 位是秒(即秒 = 格式 >> 16),其他 16 位是秒的小数(即小数 = 格式 & 0xFFFF)。转换后我希望输出为双精度。
此答案来自 Google 群聊。希望对您有所帮助:
将其视为一个 32 位小数,二进制小数点在左边,
乘以百万,保留整数部分
microsecs = ((unsigned long long) frac * 1000000) >> 32;
要四舍五入(最多可以四舍五入到1000000),
microsecs = ((unsigned long long) frac * 1000000 + (1LL<<31)) >> 32;
TS_short
是 uint32_t RFC 5905 NTP 短格式,以下将把它转换为秒数:
double secs = (double)(TS_short >> 16) + (double)(TS_short & 0xFFFF) / (double)(1LL << 16);
我正在尝试将 RFC 5905 NTP Short Format 转换为秒。 NTP 短格式是 uint32_t,前 16 位是秒(即秒 = 格式 >> 16),其他 16 位是秒的小数(即小数 = 格式 & 0xFFFF)。转换后我希望输出为双精度。
此答案来自 Google 群聊。希望对您有所帮助:
将其视为一个 32 位小数,二进制小数点在左边,
乘以百万,保留整数部分
microsecs = ((unsigned long long) frac * 1000000) >> 32;
要四舍五入(最多可以四舍五入到1000000),
microsecs = ((unsigned long long) frac * 1000000 + (1LL<<31)) >> 32;
TS_short
是 uint32_t RFC 5905 NTP 短格式,以下将把它转换为秒数:
double secs = (double)(TS_short >> 16) + (double)(TS_short & 0xFFFF) / (double)(1LL << 16);