[英]How to determine whether a 32-bit/64-bit value has a certain 16-bit value?
[英]How to return a 16 bit value as 64 bit?
// Returns 64 bit mac timer count value
uint64_t get_timestamp()
{
uint16_t cnt;
cnt = read_counter();
printk ("counter value is 0x%x\n", cnt);
return cnt;
}
在呼叫者内:
uint64_t ts;
ts = get_timestamp();
printk ( "returned timestamp is 0x%x \n", ts );
屏幕上显示以下内容,上面有什么问题?
计数器值为0x000045a5
返回的时间戳为0x00000000
计数器值为0x0000698f
返回的时间戳为0x00000000
您看到此问题是因为您错误地打印了这些值。 uint*_t
类型有专用的printf
格式宏。
从<inttypes.h>
的联机帮助页中:
The fprintf() macros for signed integers are:
PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
PRIiN PRIiLEASTN PRIiFASTN PRIiMAX PRIiPTR
The fprintf() macros for unsigned integers are:
PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR
PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR
PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR
PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR
因此,例如,要打印uint16_t
和uint64_t
您可以编写(未经测试):
int main (void)
{
uint16_t a = 13;
uint64_t b = 37;
printf("uint16_t: %" PRIx16 ", uint64_t: %" PRIx64 "\n", a, b);
return 0;
}
如果您对详细信息以及LEAST
和FAST
类型的语义感兴趣,则应该阅读man stdint.h
和man inttypes.h
。 很酷的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.