Я работаю над реализацией неясного сетевого протокола, и одно из требований заключается в том, что каждый заголовок пакета должен содержать 56-битную метку времени, причем первые 4 байта содержат целое число секунд с начала эпохи, иоставшиеся 3 байта содержат двоичную дробь текущей секунды. Другими словами, последние 3 байта должны представлять количество 2 ^ -24 секунд с предыдущей секунды. Первая часть временной метки тривиальна, но я изо всех сил пытаюсь реализовать код C, который будет хранить дробную часть временной метки. Кто-нибудь может пролить некоторый свет на то, как это сделать?
Для полноты, вот код временной метки, который у меня есть. primaryHeader
- это char*
, который я использую для хранения данных заголовка пакета. Можно предположить, что первые 6 байтов в primaryHeader
содержат действительные, не связанные данные, и что primaryHeader
достаточно велик, чтобы в нем содержалось все, что необходимо сохранить.
int secs = (int)time(NULL);
memcpy(&primaryHeader[7], &secs, sizeof(int));
// TODO: Compute fractional portion of the timestamp and memcpy to primaryHeader[11]