Утро!
Я пытаюсь получить наносекундную метку времени (uint64_t) из структуры timeval.
struct timeval t;
// initialized so that ....
print("t sec: %ld, micro sec: %ld", t.tv_sec, t.tv_usec);
// .... prints "t sec: 4, micro sec: 130728"
long int sec = (long int) t.tv_sec;
// just did that because I thought that using time_t in calculations may cause errors
// print("%ld", sec) -> 4, so this seems to work as expected
uint64_t t_int = (sec * 1000000 + t.tv_usec) * 1000; // should be nanoseconds
print("t_int (uint64_t) %llu", t_int);
// prints "t_int (uint64_t) 18446744073545312320"
Мои временные интервалы обязательно должны соответствовать uint64_t. Кроме того, приведение к long int из time_t работает, поэтому все, что я делаю, это простой расчет с двумя длинными целыми числами, помещая результат в uint64_t, поэтому я не уверен, почему я получаю явно неправильное значение. Любые идеи? Это просто неправильный способ форматирования (с% llu)?