3

timeval 型の変数からミリ秒単位で値を取得したいと考えています。以下は私の試みです:

timeval* time;
long int millis = (time->tv_sec * 1000) + (time->tv_usec / 1000);
printf("Seconds : %ld, Millis : %ld", time->tv_sec, millis);

Output => Seconds : 1378441469, Millis : -243032358

問題は、ミリ秒の値をマイナスで取得していることです。このスニペットの何が問題になっていますか?

4

1 に答える 1

6

あなたが正しく初期化したと仮定すると、それは 1000timeを掛けたときにオーバーフローしているためです。time->tv_secこれを回避するには、64 ビット乗算を使用します。

uint64_t millis = (time->tv_sec * (uint64_t)1000) + (time->tv_usec / 1000);

適切な形式で印刷してください。

于 2013-09-06T04:55:27.567 に答える