如何将16位值返回64位?

时间:2015-06-09 07:44:19

标签: c 64-bit printf

// 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

1 个答案:

答案 0 :(得分:0)

您会看到此问题,因为您错误地打印了值。 printf类型有专用的uint*_t格式宏。

来自<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;
}

如果您对详细信息感兴趣,以及man stdint.hman inttypes.h类型的语义是什么,则应阅读LEASTFAST。非常酷的东西。