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

标签 c time binary

我正在研究一个晦涩的网络协议(protocol)的实现,其中一个要求是每个数据包头都应该包含一个 56 位时间戳,前 4 个字节包含自纪元以来的整数秒数,并且其余 3 个字节用于包含当前秒的二进制小数。换句话说,最后 3 个字节应该表示自上一秒以来的 2^-24 秒数。时间戳的第一部分是微不足道的,但我正在努力实现将存储时间戳的小数部分的 C 代码。谁能阐明如何做到这一点?

为了完整起见,这是我目前拥有的时间戳代码。 primaryHeader 是一个 char*,我用它来存储数据包的 header 数据。您可以假设 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]

最佳答案

time() 函数只会给你秒数。你是一个更高分辨率的计时器。

struct timespec t;
timespec_get(&ts, TIME_UTC);
int secs = t.tv_sec; // Whole seconds
int frac = ((int64_t)t.tv_nsec << 24) / 1000000000; // Fractional part.

如果这不可用,您可以使用 clock_gettime,但 clock_gettime 在 Windows 上找不到。

关于c - 在 C 中将时间戳存储为二进制分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58631706/

相关文章:

c# - 给定一个 DateTimeZone 和两个 Instants,确定 LocalTime 是否落在两个 Instants 之间

PHP 警告 : pack(): Type H: illegal hex digit r error

c# - 将十六进制字符串转换为二进制字符串

在 C 中创建 atoi 函数

C中的cc编译器问题

c - 从文本中读取数字并对数字进行排序

c++ - 无法将 'idt_entry_t (*)[256] 转换为 u8int*

Javascript 音频在一天中的特定时间播放,并从多个不同的音频中随机选择

c++ - 获取 Windows 时区信息 (C++/MFC)

c - 使用 C 套接字在 HTTP 响应中发送二进制文件