我正在从运行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);
我很困惑,因为变量本身具有相同的值,我缺少什么?
答案 0 :(得分:3)
使用"%16x"
时,printf
将给定值处理为unsigned int
。
请使用以下内容告知printf
值为long long
:"%16llx"
来自printf
的手册页:
ll
(好吧)。以下整数转换对应于long long int或unsigned long long int参数,或随后的n转换 对应于一个long long int参数的指针。