c - 如何将 16 位值返回为 64 位值?

标签 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

最佳答案

您遇到此问题是因为您错误地打印了值。 有专用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_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;
}

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

关于c - 如何将 16 位值返回为 64 位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725918/

相关文章:

c++ - 使用常量内存将结构数组从主机复制到设备

java - 从 Java 程序编译 C 程序

c - 如何在 sprintf() 中获取追加模式

c - printf 格式字符串最大宽度值(填充)%(??)d%n

c - 一种基于另一个变量对某个值执行 MPI 全部缩减的有效方法?

c - C 中的关联数组

windows - 从 32 位应用程序使用 64 位驱动程序

java - linux 64bit - jni 链接错误

linux - 将 Linux x86-64 程序集 hello world 程序与 ld 链接失败

你能解释一下吗,挑战?