簡體   English   中英

如何將16位值返回為64位?

[英]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_tuint64_t您可以編寫(未經測試):

int main (void)
{
  uint16_t a = 13;
  uint64_t b = 37;

  printf("uint16_t: %" PRIx16 ", uint64_t: %" PRIx64 "\n", a, b);

  return 0;
}

如果您對詳細信息以及LEASTFAST類型的語義感興趣,則應該閱讀man stdint.hman inttypes.h 很酷的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM