将时间戳存储为二进制分数在C中

问题描述 投票:0回答:1

我正在研究一种晦涩的网络协议,其中一项要求是,每个数据包标头都应包含56位的时间戳,前4个字节应包含自纪元以来的秒数,并且剩余的3个字节用于包含当前秒的二进制分数。换句话说,最后3个字节应表示自前一秒以来的2 ^ -24秒。时间戳的第一部分是微不足道的,但是我正在努力实现将存储时间戳的小数部分的C代码。任何人都可以阐明如何执行此操作吗?

为了完整起见,这是我到目前为止的时间戳代码。 primaryHeader是我用来存储数据包头数据的char*。您可以假设primaryHeader中的前6个字节包含有效的,无关的数据,并且primaryHeader足够大,可以容纳需要存储在其中的所有内容。

int secs = (int)time(NULL);
memcpy(&primaryHeader[7], &secs, sizeof(int));
// TODO: Compute fractional portion of the timestamp and memcpy to primaryHeader[11]
c time binary
1个回答
0
投票

time()功能只会给您几秒钟。您需要类似clock_gettime()的内容。

struct timespec t;
clock_gettime(CLOCK_REALTIME, &t);
int secs = t.tv_sec; // Whole seconds
int frac = ((int64_t)t.tv_nsec << 24) / 1000000000;

据我所知,这在Windows上不可用。

© www.soinside.com 2019 - 2024. All rights reserved.