![](/img/trans.png)
[英]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.