4

朝!

timeval 構造体からナノ秒のタイムスタンプ (uint64_t) を取得しようとしています。

    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"

私の timevals は間違いなく uint64_t に収まるはずです。また、time_t から long int へのキャストが機能するため、2 つの long int を使用して結果を uint64_t に入れる単純な計算を行っているだけなので、明らかに間違った値が得られる理由がわかりません。何か案は?これはフォーマットの方法が間違っているだけですか (%llu を使用)?

4

2 に答える 2