当使用64位(长整长)时,为什么带有%lld的printf返回的数字与%16x的返回数字不同?

时间:2019-06-07 07:55:50

标签: c intel-fpga

我正在从运行Linux的HPS访问FPGA上的内存,但偶然发现了一个问题。

    {
        long long address_debug = *(shared_memory + i);
        printf("index: %i - value: %16x \n", i, address_debug);
    }

以十六进制格式返回我期望的值,而


    for (i = 0; i < 700; i++)
    {
        long long address_debug = *(shared_memory + i);

            printf("index: %i - value: %lld \n", i, address_debug);
    }

返回左移32位的值。我得到正确的结果:

printf("index: %i - value: %lld \n", i, address_debug>>31);

printf("index: %i - value: %llu \n", i, address_debug>>31);

我很困惑,因为变量本身具有相同的值,我缺少什么?

1 个答案:

答案 0 :(得分:3)

使用"%16x"时,printf将给定值处理为unsigned int

请使用以下内容告知printf值为long long"%16llx"

来自printf的手册页:

  

ll

     

(好吧)。以下整数转换对应于long long   int或unsigned long long int参数,或随后的n转换   对应于一个long long int参数的指针。