我正在使用一个库,该库返回一个带有时间戳的结构,该时间戳由两个(TimestampHi,TimestampLo)unsigned longs表示.我几乎只需要打印出%lluprintf中的时间戳.
从这两个整数中获取数据并将其正确用作uint64_t的最简单方法是什么?
AnT*_*AnT 10
假设unsigned long long您的平台上是64位类型
assert(sizeof(unsigned long) * CHAR_BIT == 32);
assert(sizeof(unsigned long long) * CHAR_BIT == 64);
// Static asserts are more appropriate in cases like this
unsigned long long Timestamp = TimestampHi;
Timestamp <<= 32; Timestamp += TimestampLo;
Run Code Online (Sandbox Code Playgroud)
然后打印该Timestamp值.
与单线相同的东西
unsigned long long Timestamp = ((unsigned long long) TimestampHi << 32) + TimestampLo;
Run Code Online (Sandbox Code Playgroud)
或者干脆
printf("%llu\n", ((unsigned long long) TimestampHi << 32) + TimestampLo);
Run Code Online (Sandbox Code Playgroud)
如果您希望从基于位的操作中抽象代码,则可以将表达式重写为
TimestampHi * ((unsigned long long) ULONG_MAX + 1) + TimestampLo
Run Code Online (Sandbox Code Playgroud)